FactoryGirl与belongs_to / has_many关联,最少1个关联

时间:2017-03-31 18:53:10

标签: ruby-on-rails rspec

我遇到的问题特定于与belongs_to和has_many的关系,其中has_many关系需要至少一个关联。此要求导致我的工厂无法通过模型级别验证而无法创建。

我的小组模特

Group < ActiveRecord::Base
  has_many :organizations, dependent: nullify
  # commenting out the following line will make the tests pass
  validates :organizations, presence: true
  ...
end

组织模式

Organization < ActiveRecord::Base
  belongs_to :group
  ...
end

组织工厂

FactoryGirl.define do
  factory :organization
    name "test organization"
  end
end

最后问题孩子: 集团工厂

FactoryGirl.define do
  factory :group do
    name "test group"
    after(:create) do |group|
      create(:organization, group: group)
    end
  end
end

在我的测试中,我声明了工厂实例:

describe "something happens with a Group" do
  let(:group) { FactoryGirl.create :group }

  it "should work" do
    ...
  end
end

我的测试返回的错误是多种多样的,但通常都指向FactoryGirl无法创建Group工厂的实例。 e.g。

# when a test relies on creating an instance of 'Group'
ActiveRecord::RecordInvalid:
    Validation failed: Organizations can't be blank 

我使用(回调)创建群组工厂的方法来自此Thoughtbot帖子https://robots.thoughtbot.com/aint-no-calla-back-girl

有很多类似的帖子,但我发现的所有帖子以及Thoughtbot文档都没有提到这个特定的用例。提前谢谢。

1 个答案:

答案 0 :(得分:2)

这样的东西
FactoryGirl.define do
  factory :group do
    name 'test group'
    organizations { [association(:organization)] }
  end
end

主要思想是在保存之前构建所需的对象。如果您需要更多,也可以尝试build_list