一个简单的factory_girl问题

时间:2010-03-16 23:26:36

标签: ruby-on-rails testing rspec factory-bot

我在两个单独的文件中有两个工厂(post_factory.rbcomment_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"

但是没有给出任何正确的结果。也许这需要实际看错方向?或者它们几乎无所谓(因为我认为注册工厂的可见性可能更复杂)。

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

2 个答案:

答案 0 :(得分:3)

实际上我已经发现工厂的文件互相看见了。如果我们在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

答案 1 :(得分:0)

您添加的要求不起作用,因为它没有正确的路径前缀。

但是,factory_girl应该自动为您执行此操作。见the README in the git repository。它说:

  

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

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