我在哪里确认用FactoryGirl创建的用户?

Kev*_*n K 16 rspec ruby-on-rails devise-confirmable factory-bot

使用rails,devise,rspec和factorygirl:

试图为我的网站创建一些测试.我正在使用确认模型进行设计,因此当我使用FactoryGirl创建用户时,用户未得到确认.

这是我的工厂.rb:

FactoryGirl.define do
  factory :user do
    full_name             "Aren Admin"
    email                 "aren@example.com"
    password              "arenaren"
    password_confirmation "arenaren"
    role_id               ADMIN
  end
end
Run Code Online (Sandbox Code Playgroud)

这是我的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
Run Code Online (Sandbox Code Playgroud)

我收到错误,因为用户未得到确认.通过搜索我很确定我需要使用'确认'方法!并且它属于factories.rb文件,但我不知道在哪里放它.

aur*_*bee 34

您还可以按如下方式设置confirmed_at属性.适合我:

FactoryGirl.define do
  factory :user do
    full_name             "Aren Admin"
    email                 "aren@example.com"
    password              "arenaren"
    password_confirmation "arenaren"
    role_id               ADMIN
    confirmed_at          Time.now
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 请注意,“Time.now”将在定义工厂时执行,而不是在创建用户对象时执行。建议在创建时传递一个像“confirmed_at { Time.now }”这样的块来设置“confirmed_at”。 (2认同)

Joe*_*ejr 24

更好的是,执行以下操作(然后您不需要为每个测试套件创建一个前置过滤器)

Factory.define :confirmed_user, :parent => :user do |f|
  f.after_create { |user| user.confirm! }
end
Run Code Online (Sandbox Code Playgroud)

在这里找到:https: //stackoverflow.com/a/4770075/1153149

编辑以添加未弃用的语法

FactoryGirl.define do |f|
  #Other factory definitions

  factory :confirmed_user, :parent => :user do
    after_create { |user| user.confirm! }
  end
end
Run Code Online (Sandbox Code Playgroud)

编辑01/27再次更新语法

FactoryGirl.define do
  #Other factory definitions

  factory :confirmed_user, :parent => :user do
    after(:create) { |user| user.confirm! }
  end
end
Run Code Online (Sandbox Code Playgroud)


cau*_*eld 9

尝试user.confirm!你的before

这里找到