gpt4 book ai didi

ruby-on-rails - 使用 FactoryGirl 验证 has_many 关联至少有一个模型

转载 作者:数据小太阳 更新时间:2023-10-29 07:01:00 25 4
gpt4 key购买 nike

抛开关于是否应该测试模型关联是否存在的争论,我有一个名为 Order 的模型,我正在验证它至少有一个 item在其 has_many 关联中使用:

class Order < ActiveRecord::Base

has_many :items

validates :items, presence: true

end

我已将 FactoryGirl 设置为检查我的工厂(检查有效性)。所以我的订单工厂是无效的,除非我为其 has_many 集合创建一个项目。

我的订单工厂看起来像这样:

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

最佳答案

根据定义,构建后会调用.valid?。它似乎会在运行 after(:build) block 之前调用它。

尝试像这样写你的工厂:

FactoryGirl.define do

factory :order do

ignore do
items_count 1
end

items { build_list(:item, items_count) }

end
end

这应该在调用 .valid? 之前构建项目。

让我知道这是否可行:)

关于ruby-on-rails - 使用 FactoryGirl 验证 has_many 关联至少有一个模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24329210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com