Тестирование контроля доступа с огурцом и капибарой - PullRequest
0 голосов
/ 01 мая 2011

Я использую rails_admin и devise в своем приложении 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.

Ответы [ 2 ]

1 голос
/ 02 мая 2011

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

1 голос
/ 01 мая 2011

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

#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
...