【问题标题】:A simple factory_girl question一个简单的 factory_girl 问题
【发布时间】:2010-03-16 23:26:36
【问题描述】:

我在不同的文件中有两个工厂(post_factory.rbcomment_factory.rb)。我想创建一个有点复杂的工厂,它将为我创建一个包含相关 cmets 的帖子。我创建了第三个文件,名为complex_factory.rb,并编写了以下代码:

Factory.define :post_with_comments, :parent => :post do |post|
  post.after_create { |p| Factory(:comment, :post => p) }
end

但是rake spec 引发了一个错误,指出该文件不知道发布和评论工厂。就在下一刻,我天真地在顶部写了requires:

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

但这并没有给出任何正确的结果。也许这实际上需要寻找错误的方向?或者它们几乎无关紧要(因为注册工厂的可见性可能比我假设的更复杂)。

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

【问题讨论】:

  • 不是一个真正的解决方案,但是将所有这些东西放在一个文件中怎么样?
  • 按照米兰的建议,将其放在一个文件中。
  • require File.dirname(__FILE__) + "/post_factory.rb" ?

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


【解决方案1】:

实际上我已经发现带有工厂的文件可以互相看到。如果我们有一个comment_factory.rbpost_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

【讨论】:

    【解决方案2】:

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

    但是, 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      相关资源
      最近更新 更多