16

使用 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

这是我的 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

由于未确认用户,我收到错误消息。通过四处搜索,我很确定我需要使用“确认!”的方法。并且它属于 factory.rb 文件,但我不知道把它放在哪里。

4

7 回答 7

35

您还可以按如下方式设置 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
于 2012-08-25T20:52:32.777 回答
24

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

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
于 2012-08-25T20:47:32.117 回答
9

试试user.confirm!你的before街区

这里找到

于 2012-08-25T20:44:33.503 回答
3

这是为我工作的工厂

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
于 2017-07-06T00:46:09.503 回答
2

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

before(:create) { |user| user.skip_confirmation! }
于 2013-12-26T08:46:28.017 回答
2

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

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

对我来说,确认!或跳过确认!在 after(:create) 块中导致电子邮件参数的验证错误并且不起作用。

于 2014-04-21T15:02:18.467 回答
1

您应该skip_confirmation!在之前调用,create以便将其保留在用户身上。

before(:create) do |user|
  user.skip_confirmation!
end
于 2016-12-28T21:34:47.723 回答