使用RSpec测试@current_user方法

Ron*_*nze 3 ruby unit-testing rspec authlogic

我一直试图这样做几天,但我无法弄明白.我的控制器中有以下代码:

@some_object = @current_user.some_method
Run Code Online (Sandbox Code Playgroud)

在我的规范中,我想在该方法上附加一个should_receive钩子,但我不能使它工作.我已经尝试了所有这些,但它们都不起作用:

assigns[:current_user].should_receive(:some_method).at_least(:once) # expected 1, got 0
User.should_receive(:some_method).at_least(:once) # expected 1, got 0
Run Code Online (Sandbox Code Playgroud)

如何正确测试这个?我在我的规范中运行它,登录正在运行:

setup :activate_authlogic
...
UserSession.create(users(:rune))
Run Code Online (Sandbox Code Playgroud)

谢谢!

Mic*_*ley 5

一个例子来自Ruby on Rails教程.它不是@current_user直接设置和读取,而是定义了两个辅助方法:

def current_user=(user)
  @current_user = user
end

def current_user
  @current_user
end
Run Code Online (Sandbox Code Playgroud)

之后,他们使用以下方法在测试中访问此controller方法:

def test_sign_in(user)
  controller.current_user = user
end
Run Code Online (Sandbox Code Playgroud)

使用此方法,您应该能够使用

controller.current_user.should_receive(:some_method).at_least(:once)
Run Code Online (Sandbox Code Playgroud)