gpt4 book ai didi

ruby-on-rails - 如何在 AuthLogic Controller 规范中使用模拟模型?

转载 作者:行者123 更新时间:2023-12-04 05:56:13 31 4
gpt4 key购买 nike

我正在尝试在不使用夹具(而不是使用模拟模型)的情况下为 Controller 编写规范。这个 Controller 需要一个用户登录,我正在使用 AuthLogic , 关注 author's recommendations .

describe UsersController do

def mock_user(stubs={})
@mock_user ||= mock_model(User, stubs)
end

context 'when logged in' do
before { activate_authlogic }

it "exposes the logged-in user as @user in response to GET (show)" do
UserSession.create(mock_user)
...
end

...
end

...
end

这些示例都在行 UserSession.create(...) 处失败, 报告如下效果:
Mock 'User_1005' received unexpected message :changed? with (no args)

我不知道如何解决这个问题;正在 mock :changed? => false合适的?

最佳答案

Iain 发布了 solution to using mock objects with AuthLogic .换个说法,以下助手进入 spec_helpers.rb :

def current_user(stubs = {})
@current_user ||= mock_model(User, stubs)
end

def user_session(stubs = {}, user_stubs = {})
@current_user_session ||= mock_model(UserSession, {:user => current_user(user_stubs)}.merge(stubs))
end

def login(session_stubs = {}, user_stubs = {})
UserSession.stub!(:find).and_return(user_session(session_stubs, user_stubs))
end

def logout
@user_session = nil
end

我已将其纳入我的规范中,我发现它完全符合我的希望。我有为登录用户使用模拟模型的工作 Controller 规范,所以现在当我向 User 添加一个字段时,它们不会全部中断。 Iain 在规范中实现这一点的示例如下:
describe SecretsController do
before { login }
it "should be very very secret!"
end

附言我讨厌回答我自己的问题,但这是我一直在寻找的答案;只是我发现的还不够早。

关于ruby-on-rails - 如何在 AuthLogic Controller 规范中使用模拟模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1025594/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com