一个简单的Factory_girl问题
-
20-09-2019 - |
题
我有两个工厂(post_factory.rb
, comment_factory.rb
)在单独的文件中。我想创建一个复杂的工厂,该工厂将为我创建带有关联的评论的帖子。我创建了第三个文件,称为 complex_factory.rb
, ,并编写以下代码:
Factory.define :post_with_comments, :parent => :post do |post|
post.after_create { |p| Factory(:comment, :post => p) }
end
但 rake spec
提出错误,指出该文件不知道帖子和评论工厂。在下一刻,我幼稚地写道,需要:
require "post_factory.rb"
require "comment_factory.rb"
但这没有给出任何适当的结果。也许这实际上需要看起来错误的方向?或者它们几乎无关紧要(因为注册工厂可见性可能比我认为更复杂)。
我想念什么吗?有任何想法吗?
解决方案
实际上,我已经发现了与工厂相处的文件。如果我们有一个 comment_factory.rb
与 post_factory.rb
, ,以下代码可以正常工作(后工厂):
Factory.define :post_with_comments do |post|
post.caption = "Caption"
post.body "Some dummy text"
post.after_create { |p| Factory(:comment, :post => p) }
end
尽管 comment_factory.rb
看起来如下:
Factory.define :comment do |comment|
comment.body "Some wise comment text"
comment.post_id
end
其他提示
您添加的需求无效,因为它没有正确的路径前缀。
但是,Factory_girl应该自动为您执行此操作。看 GIT存储库中的README. 。它说:
工厂可以在任何地方定义,但是如果在以下位置将文件定义在文件中,则将自动加载:
test/factories.rb spec/factories.rb test/factories/*.rb spec/factories/*.rb
您必须在默认位置以外的工厂。如果您不能仅将它们移至默认值,请使用类似的内容:
Dir[File.expand_path(File.dirname(__FILE__)) + "/factories/*.rb"].each do |file|
require file
end
不隶属于 StackOverflow