我正在尝试使用rspec测试rails引擎,我使用declarative_authorization gem来管理用户的角色。 UserSessions由Authlogic管理。
在我的测试中,我调用了一个帮助方法,该方法将视图局部渲染。
在那部分我使用permitted_to? do ... end
声明授权方法。
我的期望是用html字符串获得回复。
问题是permitted_to?
抛出异常:
未定义的局部变量或方法`current_user'用于#
我仔细研究了声明性auths AuthorizationInController模块(需要使用authorization.rb,其中current_user方法被定义为类方法),并发现从allowed_for_permit调用current_user方法,该方法是从allowed_to?调用的。 / p>
当我将options_for_permit方法中的:user => current_user
更改为:user => Authorization.current_user
时,异常消失并且我的测试通过了。
我不是一个非常熟练的Rubyist,所以我不知道这是否是解决这个问题的正确方法。 allowed_to的方法?是一个declarative_authorization的基本方法,所以我不知道为什么它在正常使用时工作,而不是在测试中使用它时。
我的问题:
希望等待你的回复...
由于 循环
编辑:
我刚刚注意到我的应用程序在开发环境中的变化不再正常工作。
Authorization.current_user现在是Authorization :: AnonymousUser 而current_user是具有admin角色的有效用户...
Stubbing current_user不起作用,这是我最初尝试过的。
我的测试代码:
it "should render the main navi for all core modules" do
main_navi = YAML.load_file(File.join(Rails.root, "../..", "config/alchemy", "modules.yml"))
helper.stub(:alchemy_modules).and_return(main_navi)
Authorization.current_user = Factory(:admin_user)
helper.admin_main_navigation.should have_selector('a.main_navi_entry')
end
查看应呈现的代码:
<%- permitted_to?(
:index,
:admin
) do -%>
...
<%- end -%>
答案 0 :(得分:0)
问题是你没有current_user
,这是declarative_authorization
所期望的。
尝试使用authlogic登录:
before(:each) do
activate_authlogic
UserSession.create Factory(:admin_user)
end
这应该可以解决问题。