使用经典博客文章示例,假设我们有以下模型
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
当我们想通过工厂创建评论时,我们必须先建立一个博客并发布帖子,即使我们在测试中并不真正关心它们。在数百次测试中,这会占用大量时间。
有哪些最佳做法不能始终创建所有这些未经测试的记录?
答案 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)
尝试将灯具用于父元素。为此目的,我通常只为每个模型设置一个或两个夹具,然后将它们作为父元素提供给任何工厂创建,其中父项不重要。
您应该记住,夹具加载不会触发任何验证,因此根据您设置模型的方式,它们实际上可能无效。因此,我尽量不使用这些灯具作为任何实际测试的主题。
将我的运行时间减少一半,而不必进入模拟和存根的复杂性。