【问题标题】:devise "user_signed_in?" method in rspec设计“user_signed_in?” rspec中的方法
【发布时间】:2016-09-04 13:14:35
【问题描述】:

我有一个控制器操作,它使用设计的“user_signed_in?”作为条件。动作如下所示:

 def show           
   if user_signed_in?
     #do stuff
   end
 end

但是当我在 RSpec 中测试这个动作时,测试失败了,因为 if 块中的代码永远不会被执行。有没有办法存根“user_signed_in?”方法?

【问题讨论】:

    标签: ruby-on-rails rspec devise rspec-rails


    【解决方案1】:

    你可以像这样模拟user_signed_in? 方法:

    before do
      allow_any_instance_of(Devise::Controllers::Helpers).to receive(:user_signed_in?).and_return(false)
    end
    

    【讨论】:

      【解决方案2】:

      代码未执行,因为用户可能未登录。 要在 rspec 中登录设计用户,请在 spec/support/controller_macros.rb 中输入。

      module ControllerMacros
          def login_user
            before(:each) do
              @request.env["devise.mapping"] = Devise.mappings[:user]
              user = FactoryGirl.create(:user)
              user.confirm! #if you are using the "confirmable" module
              sign_in user
            end
          end
      end
      

      spec/rails_helper.rb 有这个:

      RSpec.configure do |config|
        config.include Devise::Test::ControllerHelpers, :type => :controller
        config.extend ControllerMacros, :type => :controller
      end
      

      然后在您的控制器规范中:

      describe MyController do 
        login_user
        ....
      end
      

      【讨论】:

      • 不,我已经让用户登录了。您显示的代码已经在我的应用程序中了。
      • 糟糕。看起来我忘了跳过之前的过滤器。他们是造成问题的人。对不起,我是新手。还是谢谢。
      • 这给了我一个 method_missing': undefined method setup' 来自 /home/klaus/.rvm/gems/ruby-2.2.2@rails-4 的 RSpec::ExampleGroups::PagesController:Class (NoMethodError) -2-7/gems/devise-4.2.0/lib/devise/test/controller_helpers.rb:28:in `block in ' 使用 RSpec 3.5 和 Devise 4.2.0
      猜你喜欢
      • 1970-01-01
      • 2016-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多