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!
).
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