我遇到的问题特定于与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文档都没有提到这个特定的用例。提前谢谢。
答案 0 :(得分:2)
像
这样的东西FactoryGirl.define do
factory :group do
name 'test group'
organizations { [association(:organization)] }
end
end
主要思想是在保存之前构建所需的对象。如果您需要更多,也可以尝试build_list
。