ruby-on-rails rspec factory-bot devise-confirmable

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