ruby-on-rails 在哪里确认使用FactoryGirl创建的用户?

mitkmikd  于 2023-02-20  发布在  Ruby
关注(0)|答案(8)|浏览(155)

使用rails、device、rspec和factorygirl:
尝试为我的站点创建一些测试。我使用可确认的设计模型,所以当我使用FactoryGirl创建用户时,用户不会被确认。
这是我的工厂。

FactoryGirl.define do
  factory :user do
    full_name             "Aren Admin"
    email                 "aren@example.com"
    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

我收到一个错误,因为用户没有被确认。通过搜索,我非常确定我需要使用'confirm!'方法,并且它属于factories.rb文件,但我不确定将它放在哪里。

insrf1ej

insrf1ej1#

您还可以按如下方式设置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
jjhzyzn0

jjhzyzn02#

更好的是,执行以下操作(这样就不需要为每个测试套件创建before filter)

Factory.define :confirmed_user, :parent => :user do |f|
  f.after_create { |user| user.confirm! }
end

在此处找到: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

编辑01/27以再次更新语法

FactoryGirl.define do
  #Other factory definitions

  factory :confirmed_user, :parent => :user do
    after(:create) { |user| user.confirm! }
  end
end
cxfofazt

cxfofazt3#

在您的before块中尝试user.confirm!
找到here

kuuvgm7e

kuuvgm7e4#

这是为我工作的工厂

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
dohp0rv5

dohp0rv55#

将Devise可确认逻辑放入after(:build)回调中...

FactoryGirl.define do
  factory :user do
    after(:build) do |u|
      u.confirm!
      u.skip_confirmation_notification!
    end
 ...
end

对我来说,将confirm!或skip_confirm!放在after(:create)块中会导致email参数的验证错误,并且不起作用。

6g8kf2rb

6g8kf2rb6#

将此行添加到User工厂定义中:

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

0md85ypi7#

您应该在调用create之前调用skip_confirmation!,以便在用户上持久化。

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

xghobddn8#

2023
不工作:

before(:create, &:skip_confirmation!)

作品:

after(:build, &:skip_confirmation!)

相关问题