factory_girl中的has_many和belongs_to关联

fre*_*ull 13 ruby unit-testing ruby-on-rails factory-bot

我有这些模型,我正在尝试使用factory_girl创建工厂.

class Foo < ActiveRecord::Base
  belongs_to :baz
end

class Baz < ActiveRecord::Base
  has_many :foos
end
Run Code Online (Sandbox Code Playgroud)

我不知道如何创建工厂而不创建一个工厂无休止地互相呼叫的循环.

Factory.define :foo do |f|
  f.after_create do |ff|
    ff.baz = Factory(:baz)
  end
end

Factory.define :baz do |f|
  f.after_create do |ff|
    ff.foos = [Factory.create(:foo)]
  end
end
Run Code Online (Sandbox Code Playgroud)

我意识到我可以ff.foos = [Factory.create(:foo)]baz工厂里闲逛,但在我的baz测试中,我被迫使用foo.baz而不是仅仅使用baz.我是否被迫在测试中将baz其从foo工厂中取出来使用该对象?或者,还有更好的方法?

sma*_*thy 9

请参阅" 入门指南"的" 关联"部分

添加

因此,您需要使用该部分的语法,即.在您的Foo声明中,您需要:

Factory.define :foo do |f|
  f.association :baz
end
Run Code Online (Sandbox Code Playgroud)

没有after_create必要的belongs_to关联.

  • 如果外键不能为空怎么办?那你需要一个after_create回调. (4认同)