如果我的工厂验证失败,如何提出错误?

时间:2018-08-30 20:00:18

标签: ruby-on-rails factory-bot

如果我使用FactoryBot创建记录,但验证失败,它将仅返回未保存的实例。 有没有办法让FactoryBot抛出错误来帮助我及早调试问题?

if in_item(resto, item[1]) and in_item(resto, item[2]):

测试将继续,最终会因为我的对象无效而在其他地方失败。

我的第一个想法是创建一个特征,并以某种方式将其默认为所有工厂使用,但是我没有发现一种简单的方法。

FactoryBot.create(:house, some_options)
=> #<House id: nil, ...>

2 个答案:

答案 0 :(得分:4)

尝试“爆炸”方法。

house = FactoryBot.build(:house, options_hash)
house.save!

不幸的是,FactoryBot没有附带create!方法,但是ActiveRecord附带了。

在Rails中,通过使用ActiveRecord而不是:create!方法,可以使:create在记录无效时引发错误。

你可以做

House.create!(FactoryBot.attributes_for(:house, options_hash))

答案 1 :(得分:2)

factory_bot使用save!作为创建实例(here is the configuration on Github)的默认值,因此,如果有任何验证错误,您应该立即得到一个错误。您是否有机会在工厂中使用自定义to_create?您能提供完整的工厂吗?