Как написать тесты контроллера, когда вы переопределяете контроллер регистрации разработки?
Я хочу переопределить Devise::RegistrationsController
для реализации некоторой пользовательской функциональности. Для этого я создал новый RegistrationsController
так:
# /app/controllers/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
def new
super
end
end
и настройте мои маршруты следующим образом:
devise_for :users, :controllers => { :registrations => "registrations" }
и попытался проверить его следующим образом:
describe RegistrationsController do
describe "GET 'new'" do
it "should be successful" do
get :new
response.should be_success
end
end
end
но это дает мне ошибку:
1) RegistrationsController GET 'new' should be successful
Failure/Error: get :new
AbstractController::ActionNotFound:
Could not find devise mapping for path "/users/sign_up".
Maybe you forgot to wrap your route inside the scope block? For example:
devise_scope :user do
match "/some/route" => "some_devise_controller"
end
# ./spec/controllers/registrations_controller_spec.rb:13:in `block (3 levels) in <top (required)>'
Так что я делаю неправильно?
Ответы
Ответ 1
Проблема заключается в том, что Devise не может отобразить маршруты из теста обратно на исходный контроллер. Это означает, что, хотя ваше приложение действительно работает нормально, если вы откроете его в браузере, ваши тесты контроллера все равно будут терпеть неудачу.
Решение состоит в том, чтобы добавить конфигурацию разработки к запросу перед каждым тестом следующим образом:
before :each do
request.env['devise.mapping'] = Devise.mappings[:user]
end
Ответ 2
Ваш маршрут должен выглядеть следующим образом:
devise_for :users, :controllers => { :registrations => "registrations" } do
get "/users/sign_up/:invitation_token" => 'registrations#new'
end