tutorial tests test run rails how ruby-on-rails ruby-on-rails-3 rspec devise

ruby-on-rails - tests - rspec rails tutorial



rspec y diseƱar ayudantes de prueba (4)

No puedo responder con certeza ... pero el olor del código para mí es el "antes (: cada)" definido dentro del ayudante. ¿Por qué no lo intentas?

#support/controller_macros.rb module ControllerMacros def login_user @request.env["devise.mapping"] = Devise.mappings[:user] @user = Factory.create(:user) sign_in @user end end

y

#requests/some_spec.rb require ''spec_helper'' describe "GET /guides/edit" do before(:each) do login_user end end

y si eso falla, tal vez simplemente no puede encontrar @request, en cuyo caso, páselo como una variable para login_user

Editar:

Parece que podrías necesitar incluir a los ayudantes de prueba. El rdoc dice que deberías tener este archivo:

# spec/support/devise.rb RSpec.configure do |config| config.include Devise::TestHelpers, :type => :controller end

No estoy seguro de si eso difiere de cómo lo conseguiste en spec_helper.rb ... parece bastante similar a mí.

De acuerdo con esto, desde la wiki de diseño, debería ser capaz de usar un método de ayuda de login_user en mis pruebas de controlador. En consecuencia, tengo lo siguiente dentro del directorio de especificaciones:

#spec_helper.rb ... Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} RSpec.configure do |config| config.include Devise::TestHelpers, :type => :controller config.extend ControllerMacros, :type => :controller ...

y

#support/controller_macros.rb module ControllerMacros def login_user before(:each) do @request.env["devise.mapping"] = Devise.mappings[:user] @user = Factory.create(:user) sign_in @user end end end

sin embargo, llamar al ayudante no funciona:

#requests/some_spec.rb require ''spec_helper'' describe "GET /guides/edit" do login_user end

¿Puede alguien señalar hacia dónde me estoy equivocando? El conjunto de pruebas funciona a partir de esto. Obtengo un mensaje de variable o método local indefinido, así que supongo que el módulo no se incluye.

Rails 3.0.7 rspec 2.6.0 idear 1.3.4

backtrace


Tengo el mismo problema con Rails 3.0.10 rspec 2.6.0 idee 1.3.4 spork-0.9.0.rc9 en las especificaciones de mi controlador, he cambiado config. extend config. extend a config.include y su trabajo!


Olvide confirmar si su aplicación no es confirmable. Tu código debería verse como

module ControllerMacros def login_user before(:each) do @request.env["devise.mapping"] = Devise.mappings[:user] user = FactoryGirl.create(:user) #user.confirm! # or set a confirmed_at inside the factory. Only necessary if you are using the confirmable module sign_in user end end end


Me imagino que hay un par de problemas con este enfoque. Lo primero es que está utilizando las especificaciones de solicitud, no las especificaciones del controlador, por lo que el método login_user no está disponible en config.extend ControllerMacros, :type => :controller . En segundo lugar, incluso si puede incluir el método, lo más probable es que no funcione, ya que los ayudantes de prueba de Devise se escriben específicamente para pruebas de control / vista, no pruebas de integración.

Eche un vistazo a la respuesta de David Chelimsky a esta pregunta SO , que puede ser de ayuda.