ruby-on-rails controller rspec devise

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!