Ruby on rails 在使用FactoryGirl时验证多个关联是否至少有一个模型
撇开是否应该测试模型关联存在的争论不谈,我有一个名为Ruby on rails 在使用FactoryGirl时验证多个关联是否至少有一个模型,ruby-on-rails,ruby,rspec,factory-bot,factory,Ruby On Rails,Ruby,Rspec,Factory Bot,Factory,撇开是否应该测试模型关联存在的争论不谈,我有一个名为Order的模型,我正在验证它的关联中至少有一个项,使用: class Order < ActiveRecord::Base has_many :items validates :items, presence: true end 根据工厂女孩的入门: 但是,当我运行规范时,Factory Girl会抛出一个FactoryGirl::InvalidFactoryError,因为订单工厂无效 解决方法 after(:buil
Order
的模型,我正在验证它的关联中至少有一个项,使用:
class Order < ActiveRecord::Base
has_many :items
validates :items, presence: true
end
根据工厂女孩的入门:
但是,当我运行规范时,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
(:build)do | order之后的evaluator|
evaluator.items\u count.times do
order.items根据定义,它将在构建后调用.valid?
。它似乎会在(:build)
块之后运行之前调用此函数
试着这样写你的工厂:
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
FactoryGirl.define do
factory :order do
ignore do
items_count 1
end
items { build_list(:item, items_count) }
end
end
这应该在调用.valid?
之前生成项
让我知道这是否有效:)您正在执行创建列表(:项)
,是否有项
工厂定义?是。项目工厂在那里并且是有效的。我认为你应该在(:create)
之后使用而不是(:build)
之后使用,因为在just build中,订单
不会保存,也没有订单id
用于项目
@vee,但是如果它验证了至少一个项目的存在,在你的解决方案中,@Pedr是指order.items吗
FactoryGirl.define do
factory :order do
ignore do
items_count 1
end
items { build_list(:item, items_count) }
end
end