ruby on rails - La prueba de RSpec del controlador de sesión de diseño personalizado falla con AbstractController:: ActionNotFound
ruby-on-rails devise (1)
Finalmente solucioné mi problema al incluir los asistentes de prueba de dispositivos, llamando al método setup_controller_for_warden en mi prueba Y haciendo request.env ["devise.mapping"] = Devise.mappings [: user]. Al igual que:
require ''test_helper''
class SessionsControllerTest < ActionController::TestCase
include Devise::TestHelpers
test "should reject invalid captcha" do
setup_controller_for_warden
request.env["devise.mapping"] = Devise.mappings[:user]
get :new
assert_response :success
end
end
Sin embargo, no estoy seguro acerca de su problema de doble renderizado, ¿está seguro de que se supone que debe llamar a la publicación: crear y luego procesar? No estoy seguro de cómo se supone que rspec funciona.
Actualmente estoy intentando probar un controlador de sesión Devise personalizado con rspec. Mi controlador se ve así:
class SessionsController < Devise::SessionsController
def create
#valid email?
if !(params[:email] =~ /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+/.[A-Za-z]{2,}$/)
set_flash_message :notice, "Please enter a valid e-mail address!"
end
super
end
end
Mi prueba de controlador RSpec es la siguiente:
require ''spec_helper''
require ''devise/test_helpers''
describe SessionsController do
it "should put a warning on invalid mail address login attempt" do
post :create, :user => {:email => ''invalidEmailAddress''}
response.should contain "Please enter a valid e-mail address!"
end
it "should put no warning on valid mail address login attempt" do
pending
end
end
Si ejecuto la prueba RSpec, falla con la siguiente línea:
Failure/Error: post :new, :user => {:email => ''invalidEmailAddress''}
AbstractController::ActionNotFound
# ./spec/controllers/sessions_controller_spec.rb:7
Los consejos de la Wiki de Plataformatec Devise y esta publicación no solucionaron este problema. Gracias por tu ayuda.
Adición
Investigé más a fondo. De hecho, pude "eliminar" el error con la siguiente adición a la especificación del controlador:
before(:each) do
request.env[''devise.mapping''] = Devise.mappings[:user]
end
Pero ahora aparece un nuevo error:
Failure/Error: post :create #currently fails with multiple render warning
Render and/or redirect were called multiple times in this action. Please note that you may only call render OR redirect, and at most once per action. Also note that neither redirect nor render terminate execution of the action, so if you want to exit an action after redirecting, you need to do something like "redirect_to(...) and return".
Incluso con el método de creación omitido en el controlador heredado, aparece el error. El error no aparece en get: new por ejemplo. Parece ser post: crear solo. ¿Se me acabaron las ideas? ¿Alguna ayuda? ¡Gracias!