我有一个控制器动作,它使用设计" user_signed_in?"作为一个条件。行动如下:
def show
if user_signed_in?
#do stuff
end
end
但是当我在RSpec中测试这个动作时,测试失败了,因为if块中的代码永远不会被执行。有没有办法存根" user_signed_in?"方法
答案 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