ruby on rails - ¿Dónde confirmo el usuario creado con FactoryGirl?
ruby-on-rails rspec (7)
Añadir esta línea dentro de la definición de fábrica funcionó para mí
antes (: crear) {| usuario | user.skip_confirmation! }
Usando rieles, dispositivos, rspec y factorygirl:
Tratando de crear algunas pruebas para mi sitio. Estoy usando el modelo confirmable para el dispositivo, así que cuando creo un usuario con FactoryGirl, el usuario no está confirmado.
Estas son mis fábricas.
FactoryGirl.define do
factory :user do
full_name "Aren Admin"
email "[email protected]"
password "arenaren"
password_confirmation "arenaren"
role_id ADMIN
end
end
Y este es mi archivo de prueba rspec:
require ''spec_helper''
describe "Admin pages" do
subject { page }
describe "home page" do
let(:user) { FactoryGirl.create(:user) }
before { visit admin_home_path }
it { should have_content("#{ROLE_TYPES[user.role_id]}") }
end
end
Recibo un error porque el usuario no está confirmado. Al buscar alrededor, estoy bastante seguro de que necesito usar el método ''¡confirmar!'' y que pertenece al archivo factories.rb, pero no estoy seguro de dónde colocarlo.
Deberías llamar a skip_confirmation!
Antes de create
esto se mantiene en el usuario.
before(:create) do |user|
user.skip_confirmation!
end
Esta es la fábrica que me funcionó.
FactoryGirl.define do
factory :user do
sequence :email do |n|
"address#{n}@example.com"
end
sequence :password do |n|
"password#{n}"
end
factory :confirmed_user do
before(:create) {|user| user.skip_confirmation! }
end
end
end
Intente user.confirm!
en tu bloque before
encontrado here
Mejor aún, haga lo siguiente (entonces no necesita crear un filtro antes para cada conjunto de pruebas)
Factory.define :confirmed_user, :parent => :user do |f|
f.after_create { |user| user.confirm! }
end
encontrado aquí: https://.com/a/4770075/1153149
Editar para agregar sintaxis no en desuso
FactoryGirl.define do |f|
#Other factory definitions
factory :confirmed_user, :parent => :user do
after_create { |user| user.confirm! }
end
end
Editar 01/27 para actualizar la sintaxis de nuevo
FactoryGirl.define do
#Other factory definitions
factory :confirmed_user, :parent => :user do
after(:create) { |user| user.confirm! }
end
end
Ponga la lógica confirmable de Devise en la devolución de llamada posterior (: compilación) ...
FactoryGirl.define do
factory :user do
after(:build) do |u|
u.confirm!
u.skip_confirmation_notification!
end
...
end
Para mí, poniéndolo confirmar! o skip_confirmation! en el bloque posterior (: crear) causó errores de validación en el parámetro de correo electrónico y no funcionó.
También puede establecer el atributo confirmado de la siguiente manera. Funciona para mi:
FactoryGirl.define do
factory :user do
full_name "Aren Admin"
email "[email protected]"
password "arenaren"
password_confirmation "arenaren"
role_id ADMIN
confirmed_at Time.now
end
end