相关工厂的工厂女孩​​唯一性验证失败

AJc*_*dez 12 unit-testing ruby-on-rails factory-bot

我有(简化)工厂定义如下:

factory :league do
  acronym 'NBA'
end

factory :division do
  league
end
Run Code Online (Sandbox Code Playgroud)

分部属于联盟.当我定义这个工厂时,我的假设就是创建一个联盟,并且这个联盟会一次又一次地被重复使用,以使分区成为真正的联盟.

相反,我在第二次通话时遇到错误,FactoryGirl.create(:division)因为联盟acronym应该是独一无二的.

class League < ActiveRecord::Base
  validates :acronym, uniqueness: true
end
Run Code Online (Sandbox Code Playgroud)

在测试中导致以下中断

ActiveRecord :: RecordInvalid:验证失败:已经删除了缩略词

我该如何解决这个问题,最好不要在测试设置中创建层次结构?

如果我想要实现的目标比factory_girl更好,请建议

Ken*_*ien 7

用于initialize_with你的联赛定义.

http://robots.thoughtbot.com/post/16196616388/factory-girl-2-5-gets-custom-constructors

然后你可以发出find_or_create_by_acronym保证它创建一次.