不管你是否应该测试模型关联的存在性,我有一个名为Order
的模型我正在验证它的item
中至少有一个has_many
关联使用:
class Order < ActiveRecord::Base
has_many :items
validates :items, presence: true
end
我已将FactoryGirl设置为lint我的工厂(检查有效性)。因此,除非我为其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
,因为订单工厂无效。
解决方法
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
答案 0 :(得分:0)
根据定义,它将在建造后调用.valid?
。它似乎会在运行after(:build)
块之前调用它。
尝试像这样写你的工厂:
FactoryGirl.define do
factory :order do
ignore do
items_count 1
end
items { build_list(:item, items_count) }
end
end
这应该在调用.valid?
之前构建项目。
让我知道这是否有效:)