2011-05-01 4 views
0

Я использую rails_admin и разрабатываю в своих рельсах 3 приложения и записываю тесты для контроля доступа в огурце.Тестирование контроля доступа с огурцом и capybara

Я хочу, чтобы проверить, что кто-то не администратор не может получить доступ ко всем маршрутам rails_admin (например)

Если я явно проверить так:

Scenario: An authenticated user cannot access site administration 
    Given I am an authenticated user "kate", "[email protected]" 
    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", "[email protected]" 
    When I visit ANY administration page 
    Then I should see access denied 

Может кто-нибудь посоветовать мне о том, как эффективно проверить это? Правильно ли я подхожу? Должен ли я делать это в rspec вместо этого?

Как вы могли бы сказать, я немного n00b.

ответ

1

Я не думаю, что вы должны стремиться, чтобы проверить все возможные пути в ваших сценариях огурцов , Как предполагает Андреа С., если все ваши администраторские контроллеры имеют общую базу, то этого достаточно, чтобы проверить домашнюю страницу администратора.

1

Один из подходов - создать базовый контроллер в вашем пространстве имен admin, на который наследуются все другие администраторы/контроллеры. Вы можете установить фильтр до этого базового контроллера для проверки подлинности администратора. Как так:

#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 
+0

Это похоже на хороший способ реализовать мой контроль доступа. Спасибо. Но как я могу проверить, что это действительно работает? – Rimian

Смежные вопросы