ActiveRecord :: RecordInvalid:验证失败:已经收到电子邮件

时间:2016-01-19 02:33:10

标签: ruby-on-rails factory-bot minitest

由于用户模型中的唯一性电子邮件验证,我的测试失败了。我可以通过简单地显式创建两个具有不同电子邮件属性的新用户来解决问题并使测试变为绿色。但是下面的代码似乎也有用,但对我来说并不是很清楚。

如果有人能帮我理解其中的差异,我会很感激。用户ct2与工厂创建的ct1中的用户有何不同?

FactoryGirl.define do
  factory :classroom_template do
    association :user, factory: :student
    name "Intro to Github"
    description "Introduction Course to Github"
    ct_type "Self-paced"
  end
end

ClassroomTemplateTest.rb

it "must be ordered by name" do
  ct1 = FactoryGirl.create(:classroom_template)
  ct2 = FactoryGirl.build(:classroom_template, name: "Intro to Rails", user: ct.user)
  ct1.name.must_equal "Intro to Github"
  ct2.name.must_equal "Intro to Rails"
end

1 个答案:

答案 0 :(得分:1)

  

但是下面的代码似乎也有用,但对我来说并不是很清楚

它有效,因为下面的ct2尚未保留!请使用ct2.persisted?进行检查,您在内存中构建ct2,验证尚未运行!

  

ct2 = FactoryGirl.build(:classroom_template,名称:"介绍Rails",用户:ct.user)

为避免重复电子邮件,我在我的项目中使用了这个:

factory :user do
    sequence(:email) { |n| "user_#{n}@factory.com" }
    # Other attributes
end

这样可确保以不同方式生成电子邮件。