用黄瓜和黄瓜测试访问控制水豚

时间:2011-05-01 05:44:57

标签: ruby-on-rails-3 cucumber devise capybara rails-admin

我正在使用rails_admin并设计我的rails 3应用程序并编写黄瓜访问控制测试。

我想测试一个不是admin的人无法访问rails_admin的所有路由(例如)

如果我这样明确地测试:

  Scenario: An authenticated user cannot access site administration
    Given I am an authenticated user "kate", "kate@example.com"
    When I visit the administration page
    Then I should see access denied

我可以将字符串“管理页面”与路径“rails_admin_dashboard_path”匹配,并使我的测试通过正常。但这似乎是以错误的方式测试应用程序。我想测试所有路线(以某种方式循环它们)而不是暗示它们,也许会错过一两个。

这样的事情:

  Scenario: An authenticated user cannot access site administration
    Given I am an authenticated user "kate", "kate@example.com"
    When I visit ANY administration page
    Then I should see access denied

有人可以告诉我如何有效地测试这个吗?我采取了正确的方法吗?我应该在rspec中这样做吗?

你可能会说,我有点像n00b。

2 个答案:

答案 0 :(得分:1)

一种方法是在管理员命名空间中创建一个所有其他管理员/控制器继承的基本控制器。您可以在该基本控制器中放置一个前置过滤器以检查管理员身份验证。像这样:

#app/controllers/admin/base.rb

class Admin::Base < ApplicationController
  before_filter :ensure_admin_logged_in
end

让管理员命名空间中的所有其他控制器都继承自这个:

#app/controllers/admin/Pages.rb
class Admin::PagesController < Admin::Base
  layout "admin"
end

答案 1 :(得分:1)

我认为您不应该在Cucumber场景中测试每条可能的路线。正如Andrea S.建议的那样,如果你的所有管理控制器都有一个共同的基础,那么检查管理主页就足够了。