tutorial rails matchers ruby-on-rails rspec devise

ruby on rails - rails - Pruebas(RSpec) con módulo confirmable de Devise



rspec rails tutorial (7)

Según tengo entendido, el entorno de prueba de Rails está demolido y reconstruido antes de cada prueba ... así que, ¿cómo pruebo un controlador que requiere que el usuario inicie sesión y que ese usuario no pueda crearse sin que el módulo confirmable del dispositivo se interponga en el camino? ?

El método recomendado de Devise (a continuación) crea un nuevo usuario al que luego se envía un correo electrónico mediante el módulo confirmable de Devise. ¿Cómo me manejo en esto para no estar ''creando'' un usuario cada vez ... o si lo hago puedo obtener un objeto para probar sin "simular" un nuevo correo electrónico para cada especificación?

before(:each) do @user = Factory.create(:user) sign_in @user end

Estoy seguro de que estoy pasando por alto algo dolorosamente obvio, ya que esta debe ser una especificación muy común para cualquiera que use Devise con confirmable ...


En su entorno de prueba, ActionMailer::Base.delivery_method debe configurarse como :test , lo que significa que estos correos electrónicos no se enviarán. Si esta configuración se establece en algo más, como smtp por medio de una configuración en, por ejemplo, config/environments.rb , se enviarán correos electrónicos.

Si esa configuración ya está allí, entonces para usar el objeto User (como en, para poder iniciar sesión), deberá llamar a confirm! en eso:

user = User.first user.confirm!


Hoy se acaba de poner:

confirmado en 7.days.ago

en su fabricación


Intenta aplastar active?

@user = Factory.create(:user) @user.stub(:active?).and_return(true) sign_in @user

¿Es posible que también necesite un talón confirmed? No estoy muy familiarizado con Devise.


Para Devise 4.2 ahora está confirm (¡no confirm! ).

Source

4.2.0 - 2016-07-01

Quitar el Devise :: Modelos :: Confirmable # confirmar! método, utilice confirmar en su lugar.

El código a continuación también evita que se generen anuncios publicitarios gracias a after(:build) vs after(:create) para configurar confirmed_at

FactoryGirl.define do factory :user do after(:build) { |u| u.skip_confirmation_notification! } after(:create) { |u| u.confirm } ... end end


Para la joya de fabricación es

Fabricator(:user) do after_build { |user| user.confirm! } end


Si está usando factory_girl para generar sus modelos, puede usar after_create para confirmar a cada nuevo usuario.

Factory.define :confirmed_user, :parent => :user do |f| f.after_create { |user| user.confirm! } end


para la última versión de FactoryGirl:

FactoryGirl.define do factory :confirmed_user, :parent => :user do after(:create) { |user| user.confirm! } end end