0

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

我想测试不是管理员的人不能访问 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。

4

2 回答 2

1

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

于 2011-05-02T13:03:07.310 回答
1

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

#app/controllers/admin/base.rb

class Admin::Base < ApplicationController
  before_filter :ensure_admin_logged_in
end

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

#app/controllers/admin/Pages.rb
class Admin::PagesController < Admin::Base
  layout "admin"
end
于 2011-05-01T06:01:51.030 回答