如何加快factory_girl协会

时间:2012-05-01 16:03:44

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

使用经典博客文章示例,假设我们有以下模型

class Blog < ActiveRecord::Base
  has_many :posts
end

class Post < ActiveRecord::Base
  belongs_to :blog
  has_many :comments

  validates_presence_of :blog
end

class Comment < ActiveRecord::Base
  belongs_to :post

  validates_presence_of :post
end

当我们想通过工厂创建评论时,我们必须先建立一个博客并发布帖子,即使我们在测试中并不真正关心它们。在数百次测试中,这会占用大量时间。

有哪些最佳做法不能始终创建所有这些未经测试的记录?

2 个答案:

答案 0 :(得分:1)

我认为对于隔离这个工厂你必须假装帖子存在并将comments.post_id设置为假身份证,例如1

FactoryGirl.define do

  factory :comment do 
    content 'testing text'


    factory :comment_without_post do
      post_id 1 
    end

    factory :comment_with_post do
      post
    end
  end 
end

答案 1 :(得分:0)

尝试将灯具用于父元素。为此目的,我通常只为每个模型设置一个或两个夹具,然后将它们作为父元素提供给任何工厂创建,其中父项不重要。

您应该记住,夹具加载不会触发任何验证,因此根据您设置模型的方式,它们实际上可能无效。因此,我尽量不使用这些灯具作为任何实际测试的主题。

将我的运行时间减少一半,而不必进入模拟和存根的复杂性。