不论是否应该测试模型关联的存在性,我有一个名为Order
的模型,并且我正在验证它在其has_many
关联中至少有一个item
,使用以下代码:
class Order < ActiveRecord::Base
has_many :items
validates :items, presence: true
end
我已经设置了FactoryGirl来检查我的工厂是否有效(检查有效性)。所以,除非我为其has_many
集合创建一个项目,否则我的订单工厂将无效。
我的orders
工厂看起来像这样:
FactoryGirl.define do
factory :order do
ignore do
items_count 1
end
after(:build) do |order, evaluator|
create_list(:item, evaluator.items_count, order: order)
end
end
end
根据Factory Girl的入门指南:
FactoryGirl.lint builds each factory and subsequently calls #valid? on it
然而,当我运行我的规范时,Factory Girl 引发一个 `FactoryGirl::InvalidFactoryError` 错误,因为 order 工厂是无效的。
解决方法:
after(:build) do |order, evaluator|
evaluator.items_count.times do
order.items << FactoryGirl.create(:item)
end
#create_list(:item, evaluator.items_count, order: order)
end
create_list(:item)
操作,你是否已经定义了item
工厂? - veeafter(:create)
而不是after(:build)
,因为仅仅使用build时,order
并没有被保存,所以items
中也没有order_id
。 - veeorder.items << FactoryGirl.create(:item, order: order)
吗?还是你依赖于项目工厂来创建不同的订单?一个项目有一个或多个订单吗? - Dave Schweisguth