Ruby on rails 创建具有子状态验证工厂女孩的父级和子级
有一个项目,有许多旅行发票。我接到了一个新的消息,要求发票必须有一次旅行。我添加了一个validationRuby on rails 创建具有子状态验证工厂女孩的父级和子级,ruby-on-rails,ruby,unit-testing,testing,factory-bot,Ruby On Rails,Ruby,Unit Testing,Testing,Factory Bot,有一个项目,有许多旅行发票。我接到了一个新的消息,要求发票必须有一次旅行。我添加了一个validationvalidates:trips,presence:true,但现在它破坏了我的许多测试,因为FactoryGirl试图在创建关联的trip之前保存发票 FactoryGirl.define do factory :invoice do sequence(:invoice_id) { SecureRandom.uuid} merchant amount 100.00
validates:trips,presence:true
,但现在它破坏了我的许多测试,因为FactoryGirl试图在创建关联的trip之前保存发票
FactoryGirl.define do
factory :invoice do
sequence(:invoice_id) { SecureRandom.uuid}
merchant
amount 100.00
item_count 1
paid false
currency "GBP"
invoice_type "pre-flight"
service_rendered false
cancelled false
after(:create) { |object| create(:trip, invoice_id: object.invoice_id)}
end
end
如何创建这些对象。最好是在工厂级别,因为有许多测试利用了这种行为(目前由于它而失败)。在测试级别上,这似乎是一个很好的解决方案
更新
现在还在努力让我的测试变绿。42个测试出错,代码如下
验证失败:Trips不能为空
我的FactoryGirl代码中的当前更新行
before(:create) { |object| object << build(:trip, invoice_id: object.invoice_id)}
正在工作
@安德里康钦是对的。我以前(:create)的中遗漏了一些内容。
before(:create){| object | object.tripsbefore
回调可能对您有所帮助
从:
before(:create)-在保存工厂之前调用(通过
FactoryGirl.create)
它看起来是这样的:
before(:create) { |object| object.details << build(:invoice_detail)}
before(:create){| object | object.details在创建父对象之前,是否可以使用父对象id创建子对象?@CheeseFry,可以,但数据库中的外键约束将阻止它。不应创建,只需构建子模型并将其添加到(父模型)中即可关联;当您保存父模型(发票)时,新的子模型也将被保存,就像在我的示例中一样,对吗?更新了上面的代码,使其工作正常。感谢您的示例!
before(:create) { |object| object.details << build(:invoice_detail)}