设计" user_signed_in?" rspec中的方法

时间:2016-09-04 13:14:35

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

我有一个控制器动作,它使用设计" user_signed_in?"作为一个条件。行动如下:

 def show           
   if user_signed_in?
     #do stuff
   end
 end

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

2 个答案:

答案 0 :(得分:1)

代码未执行,因为用户可能未登录。 要在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

答案 1 :(得分:0)

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

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