Ответ 1
Попробуйте user.confirm!
в блоке before
найдено здесь
Использование рельсов, devise, rspec и factorygirl:
Попытка создать несколько тестов для моего сайта. Я использую подтверждаемую модель для разработки, поэтому, когда я создаю пользователя с помощью FactoryGirl, пользователь не подтверждается.
Это мои заводы .rb:
FactoryGirl.define do
factory :user do
full_name "Aren Admin"
email "[email protected]"
password "arenaren"
password_confirmation "arenaren"
role_id ADMIN
end
end
И это мой тестовый файл 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
Я получаю сообщение об ошибке, потому что пользователь не подтвержден. Побывав вокруг, я уверен, что мне нужно использовать метод "подтверди!". и что он принадлежит файлу factories.rb, но я не уверен, куда его поместить.
Попробуйте user.confirm!
в блоке before
найдено здесь
Вы также можете установить атрибут confirm_at следующим образом. Работает для меня:
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
Еще лучше, сделайте следующее (тогда вам не нужно создавать фильтр перед каждым набором тестов)
Factory.define :confirmed_user, :parent => :user do |f|
f.after_create { |user| user.confirm! }
end
найдено здесь: fooobar.com/questions/191439/...
Изменить, чтобы добавить не устаревший синтаксис
FactoryGirl.define do |f|
#Other factory definitions
factory :confirmed_user, :parent => :user do
after_create { |user| user.confirm! }
end
end
Редактировать 01/27 Чтобы снова обновить синтаксис
FactoryGirl.define do
#Other factory definitions
factory :confirmed_user, :parent => :user do
after(:create) { |user| user.confirm! }
end
end
Добавьте эту строку в ваше фабричное определение User
:
before(:create) { |user| user.skip_confirmation! }
Это factory, который работал у меня
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
Положите логику подтверждения Devise в обратный вызов after (: build)...
FactoryGirl.define do
factory :user do
after(:build) do |u|
u.confirm!
u.skip_confirmation_notification!
end
...
end
Для меня, подтверждая! или skip_confirmation! в блоке after (: create) вызвали ошибки проверки по параметру электронной почты и не работали.
Вы должны позвонить skip_confirmation!
до create
, чтобы это сохранялось на пользователе.
before(:create) do |user|
user.skip_confirmation!
end