Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 使用cucumber&;水豚_Ruby On Rails 3_Cucumber_Devise_Capybara_Rails Admin - Fatal编程技术网

Ruby on rails 3 使用cucumber&;水豚

Ruby on rails 3 使用cucumber&;水豚,ruby-on-rails-3,cucumber,devise,capybara,rails-admin,Ruby On Rails 3,Cucumber,Devise,Capybara,Rails Admin,我在rails 3应用程序中使用rails_admin和Desive,并在cucumber中编写访问控制测试 我想测试一下,不是管理员的人不能访问rails\u admin的所有路由(例如) 如果我明确地这样测试: Scenario: An authenticated user cannot access site administration Given I am an authenticated user "kate", "kate@example.com" When I

我在rails 3应用程序中使用rails_admin和Desive,并在cucumber中编写访问控制测试

我想测试一下,不是管理员的人不能访问rails\u 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
我可以将字符串“theadministrationpage”与路径“rails\u admin\u dashboard\u 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。

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

#app/controllers/admin/base.rb

class Admin::Base < ApplicationController
  before_filter :ensure_admin_logged_in
end
#app/controllers/admin/base.rb
类Admin::Base
并使管理命名空间中的所有其他控制器继承自此控制器:

#app/controllers/admin/Pages.rb
class Admin::PagesController < Admin::Base
  layout "admin"
end
#app/controllers/admin/Pages.rb
类Admin::PagesController
我不认为你应该在你的场景中测试每一条可能的路线。正如Andrea S.所建议的,如果您所有的管理员控制器都有一个共同的基础,那么查看管理员主页就足够了。

这似乎是实现我的访问控制的一个好方法。非常感谢。但是我怎么能测试它是否真的有效呢?