Вопрос

Я использую 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.

Это было полезно?

Решение

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

Другие советы

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

#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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top