在factory_girl中填充与孩子的关联
我有一个模型 Foo
has_many 'Bar'。我为每个对象都有一个factory_girl 工厂。 Bar 的工厂与 Foo 有关联;当它创建 Bar 时,它会实例化一个 Foo。
我想要一个工厂来创建一个包含 Bar 的 Foo。理想情况下,这个 Bar 将通过 :bar 工厂创建,并遵循用于创建 Foo 的构建策略(创建/构建)。
我知道我可以调用 :bar 工厂,然后从新 Bar 中获取 Foo 引用。我想避免这种情况;在我的测试用例中,重要的对象是 Foo;调用 Bar 工厂似乎有点迂回。另外,我可以看到需要一个带有多个 Bar 的 Foo。
这在factory_girl中可能吗?你如何定义父母之间的这种关系?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
发布评论
评论(5)
没企图 2024-09-10 03:40:06
您可以通过两种方式使用 association
方法:
Factory.define :foo do |f|
# ...
f.association :bar
end
如果这不起作用,您可以使用回调手动关联它们。这是我的一个应用程序的示例:
Factory.define :live_raid do |raid|
end
Factory.define :live_raid_with_attendee, :parent => :live_raid do |raid|
raid.after_create { |r| Factory(:live_attendee, :live_raid => r) }
end
辞别 2024-09-10 03:40:06
FactoryGirl 现在有一个 :method =>;您可以在关联上使用 :build
选项,这将构建关联的对象而不是创建它。
~没有更多了~
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
Factory.after_ hooks 似乎是成功完成此操作的唯一方法。我找到了一种在不重复代码的情况下维护构建策略的方法:
文档指出 ="">:create 构建策略,>after_build 将在
after_create
之前调用。如果使用:build
,那么只调用after_build
,大家皆大欢喜。我还创建了一个抽象的通用版本以此要点来保持干燥。
The
Factory.after_ hooks
appear to be the only way to do this successfully. I've figured out a way to maintain the build strategy without duplicating code:The documentation states that
after_build
will be called beforeafter_create
if the:create
build strategy is used. If:build
is used, then onlyafter_build
is called, and everyone is happy.I've also created an abstracted generally-applicable version at this gist to keep things DRY.