我正在尝试为创建操作编写 rspec 测试。控制器是 OrderController。Order 模型有许多行项目。我不知道我该怎么做这个电话:
发布:创建,订购:FactoryGirl.build(:order).attributes
但这失败了,因为我的验证说:订单应该至少有一个订单项。我认为我应该创建一个包含订单项的订单。
非常感谢。
我正在尝试为创建操作编写 rspec 测试。控制器是 OrderController。Order 模型有许多行项目。我不知道我该怎么做这个电话:
发布:创建,订购:FactoryGirl.build(:order).attributes
但这失败了,因为我的验证说:订单应该至少有一个订单项。我认为我应该创建一个包含订单项的订单。
非常感谢。
您可以使用 FactoryGirl 构建关联对象。不过,您有两种选择:
1.)手动/显式方法 - 在这里您将 line_items 传递给工厂调用:
FactoryGirl.build(:order, line_items: [build(:line_item), build(:line_item)]
2.) 自动方法 - 您将工厂配置为始终包含至少一个行项目:
在您的工厂文件中:
factory :order do
# attrs
after :build do |order, ev|
order.line_items << build(:line_item)
end
end
这将适用于构建一个具有默认属性的默认 line_item。如果您想拥有更具体的属性,则必须回退到使用第一种方法。
您可以在 factory_girl 中定义关联。
factory :order_line do
#some attributes
order
end
factory :order do
#some attributes
#the line's count you want to create
ignore do
lines_count 5
end
after(:create) do |order, evaluator|
FactoryGirl.create_list(:order_line, evaluator.lines_count, order: order)
end
end
因此,当您使用 factory_girl 创建订单时,您也将构建一些行。