Ruby on rails 一个简单的工厂女孩问题

Ruby on rails 一个简单的工厂女孩问题,ruby-on-rails,testing,rspec,factory-bot,Ruby On Rails,Testing,Rspec,Factory Bot,我有两个工厂(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) }

我有两个工厂(
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
但是,
rakespec
引发了一个错误,指出该文件不知道post和comment工厂。就在下一刻,我天真地在顶部写道:

require "post_factory.rb"
require "comment_factory.rb"
但这并没有给出任何正确的结果。也许这需要看错方向?或者它们几乎无关紧要(因为注册工厂的可见性可能比我想象的更复杂)


我错过什么了吗?有什么想法吗?

事实上,我发现工厂里的文件是互相看的。如果我们有一个
comment\u factory.rb
post\u factory.rb
,以下代码可以正常工作(post-factory):

comment\u factory.rb
如下所示:

Factory.define :comment do |comment|
  comment.body "Some wise comment text"
  comment.post_id
end

您添加的require无效,因为它没有正确的路径前缀

然而,工厂女孩应该自动为你做这件事。看见它说:

工厂可以在任何位置定义,但如果在以下位置的文件中定义工厂,则工厂将自动加载:

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

这不是一个真正的解决方案,但是把所有这些东西放在一个文件中怎么样?正如米兰建议的那样,把它放在一个文件中。
需要file.dirname(\uu file\uu)+“/post\u factory.rb”
Dir[File.expand_path(File.dirname(__FILE__)) + "/factories/*.rb"].each do |file|
    require file
end