Где я могу подтвердить пользователя, созданного с помощью FactoryGirl?

Использование рельсов, 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, но я не уверен, куда его поместить.

Ответы

Ответ 1

Попробуйте user.confirm! в блоке before

найдено здесь

Ответ 2

Вы также можете установить атрибут 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

Ответ 3

Еще лучше, сделайте следующее (тогда вам не нужно создавать фильтр перед каждым набором тестов)

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

Ответ 4

Добавьте эту строку в ваше фабричное определение User:

before(:create) { |user| user.skip_confirmation! }

Ответ 5

Это 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

Ответ 6

Положите логику подтверждения 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) вызвали ошибки проверки по параметру электронной почты и не работали.

Ответ 7

Вы должны позвонить skip_confirmation! до create, чтобы это сохранялось на пользователе.

before(:create) do |user|
  user.skip_confirmation!
end