【问题标题】:How to stub Restul-authentication's current_user method?如何存根 Restul-authentication 的 current_user 方法?
【发布时间】:2010-05-12 18:51:19
【问题描述】:

我正在尝试运行以下规范:

describe UsersController, "GET friends" do

  it "should call current_user.friends" do
    user = mock_model(User)
    user.should_receive(:friends)
    UsersController.stub!(:current_user).and_return(user)
    get :friends
  end

end

我的控制器是这样的

  def friends
    @friends = current_user.friends
    respond_to do |format|
      format.html
    end
  end

问题是我无法存根 current_user 方法,因为当我运行测试时,我得到:

Spec::Mocks::MockExpectationError in 'UsersController GET friends should call current
_user.friends'
Mock "User_1001" expected :friends with (any args) once, but received it 0 times[0m
./spec/controllers/users_controller_spec.rb:44:

current_user 是来自 Restful-authentication 的一个方法,它包含在这个控制器中。我应该如何测试这个控制器?

提前致谢

【问题讨论】:

    标签: ruby-on-rails rspec


    【解决方案1】:

    您需要模拟一个用户,然后将其传递给 login_as 方法以模拟用户登录。

    @user_session = login_as(stub_model(User))
    UserSession.stubs(:new).returns(@user_session)
    

    http://bparanj.blogspot.com/2006_12_01_archive.html

    【讨论】:

    • 我试过了:
       它“应该调用 current_user.friends”做 user = mock_model(User) user.should_receive(:friends) @​​user_session = login_as(user) get :friends end  但它也没有工作。我认为如果我只调用 login_as 就可以解决。为什么会这样?
    • 您可能还需要调用:UserSession.stubs(:new).returns(@user_session) (或将 UserSession 重命名为 restful-authentication 为处理会话而创建的会话模型)
    猜你喜欢
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多