Ни один маршрут не соответствует анонимному контроллеру rspec

Основываясь на моем понимании спецификации 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"}

Я даже пытался определить маршрут для "анонимного" контроллера в файле маршрутов, но безуспешно. Что-то мне здесь не хватает? Это должно сработать, не так ли?

28
задан Lachlan Cotter 11 August 2011 в 14:18
поделиться

1 ответ

Чтобы использовать пользовательские маршруты в спецификации анонимного контроллера, необходимо изменить маршрут, заданный в блоке 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.

Рисование пользовательских маршрутов для анонимных контроллеров

24
ответ дан 28 November 2019 в 03:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: