代码之家  ›  专栏  ›  技术社区  ›  oldhomemovie

一个简单的工厂女孩问题

  •  2
  • oldhomemovie  · 技术社区  · 14 年前

    我有两个工厂( 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 引发一个错误,说明该文件不知道post和comment工厂。在下一刻,我不愿意写的要求在顶部:

    require "post_factory.rb"
    require "comment_factory.rb"
    

    但这并没有给出任何正确的结果。也许这需要看错方向?或者它们几乎不重要(因为为可视性注册工厂可能比我想象的更复杂)。

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

    2 回复  |  直到 14 年前
        1
  •  3
  •   oldhomemovie    14 年前

    事实上,我发现工厂里的文件是互相看的。如果我们有 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
    

    同时 备注\factory.rb 如下所示:

    Factory.define :comment do |comment|
      comment.body "Some wise comment text"
      comment.post_id
    end
    
        2
  •  0
  •   Otto    14 年前

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

    但是,工厂女孩应该自动为你做这个。见 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