使用声明性授权使用Rspec测试Rails应用程序helper方法allowed_to?

时间:2011-11-20 13:34:13

标签: ruby testing ruby-on-rails-3.1 integration-testing rspec2

我正在尝试使用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 -%>

1 个答案:

答案 0 :(得分:0)

问题是你没有current_user,这是declarative_authorization所期望的。

尝试使用authlogic登录:

before(:each) do
    activate_authlogic
    UserSession.create Factory(:admin_user)
end

这应该可以解决问题。