我有一家工厂,如下所示:
FactoryGirl.define do
factory :product do
name 'John'
end
end
我有很多规格使用这个工厂:
product = create :product
我现在添加了一个Product belongs_to :user
关联,并在状态下对其进行验证:
class Product < ApplicationRecord
validates :user, presence: true
end
我现在必须重构我所有的工厂电话(或类似的东西):
product = create :product, user: create(:user)
这对我来说似乎很麻烦。我想FactoryGirl自动为我做这件事。它应该是这样的:
这样做有好办法吗?我想避免在创建产品时查询数据库是否存在用户。
此外,它可能很危险,因为现有用户可能会在测试期间被销毁,然后会丢失到任何后续创建的产品中。
这有更好的模式吗?
我看过像验证ID而不是对象的内容:
validates :user_id, presence: true
然后在创建对象时简单地指定一个不存在的ID:
product = create :product, user_id: 123456
这是一个好模式吗?
我所有深度嵌套/关联的资源很快就会有belongs_to :user
个关联。我想避免在我的规范中到处写user: create(:user)
(或user: @user
)。
我确信这有一个久经考验的模式......?
答案 0 :(得分:2)
可以在工厂内建立关联。如果是工厂 name与关联名称相同,可以保留工厂名称 出。
http://www.rubydoc.info/gems/factory_bot/file/GETTING_STARTED.md#Associations
FactoryGirl.define do
factory :product do
name 'John'
user
end
end