Основываясь на моем понимании спецификации rspec , я ожидаю, что следующий пример будет успешным.
describe ApplicationController do
controller do
def test
end
end
it "calls actions" do
get :test
end
end
Вместо этого он терпит неудачу:
No route matches {:controller=>"anonymous", :action=>"test"}
Я даже пытался определить маршрут для "анонимного" контроллера в файле маршрутов, но безуспешно. Что-то мне здесь не хватает? Это должно сработать, не так ли?
Чтобы использовать пользовательские маршруты в спецификации анонимного контроллера, необходимо изменить маршрут, заданный в блоке before. RSpec уже устанавливает маршруты RESTful, используя resources :anonymous
в блоке before, и восстанавливает исходные маршруты в блоке after. Поэтому, чтобы получить свои собственные маршруты, просто позвоните в draw @routes
и добавьте то, что вам нужно.
Вот пример из спецификации ApplicationController
, которая тестирует обновление rescue_from CanCan::AccessDenied
require 'spec_helper'
describe ApplicationController
controller do
def access_denied
raise CanCan::AccessDenied
end
end
before do
@routes.draw do
get '/anonymous/access_denied'
end
end
it 'redirects to the root when access is denied' do
get :access_denied
response.should redirect_to root_path
end
it 'sets a flash alert when access is denied' do
get :access_denied
flash.alert.should =~ /not authorized/i
end
end
Обработка для этого была улучшена где-то около RSpec 2.12 , Если вы используете> 2.12, вам больше не нужно подключаться к @routes
.
Рисование пользовательских маршрутов для анонимных контроллеров