0

以经典的博客文章为例,假设我们有以下模型

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

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

有哪些最佳实践可以避免一直创建所有这些未经测试的记录?

4

2 回答 2

1

我认为为了隔离这个工厂,你必须假装帖子存在并将 comments.post_id 设置为假 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
于 2012-05-01T18:10:14.353 回答
0

尝试对父元素使用固定装置。为此,我通常只为每个模型设置一个或两个固定装置,然后将它们作为父元素提供给任何父元素不重要的工厂创建。

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

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

于 2012-05-10T14:02:12.603 回答