ruby on rails - ror - ¿Cómo escribir pruebas de controlador cuando anula el controlador de registro de dispositivo?
routes rails examples (2)
El problema es que Devise no puede asignar rutas desde la prueba al controlador original. Eso significa que, si bien su aplicación realmente funciona bien si la abre en el navegador, las pruebas de su controlador seguirán fallando.
La solución es agregar el mapeo de dispositivos a la solicitud antes de cada prueba de la siguiente manera:
before :each do
request.env[''devise.mapping''] = Devise.mappings[:user]
end
Deseo anular Devise::RegistrationsController
para implementar alguna funcionalidad personalizada. Para hacer esto, he creado un nuevo RegistrationsController
así:
# /app/controllers/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
def new
super
end
end
y configurar mis rutas como esta:
devise_for :users, :controllers => { :registrations => "registrations" }
Y traté de probarlo así:
describe RegistrationsController do
describe "GET ''new''" do
it "should be successful" do
get :new
response.should be_success
end
end
end
pero eso me da un error:
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)>''
Entonces, ¿qué estoy haciendo mal?
Su ruta debe verse así:
devise_for :users, :controllers => { :registrations => "registrations" } do
get "/users/sign_up/:invitation_token" => ''registrations#new''
end