我正在尝试创建一个涵盖以下场景的rspec测试。 有一个具有唯一列索引的模型。在真实环境中,我有一个负载均衡器,并且想要模拟创建行为,因此当插入两个重复记录时,将触发数据库验证。使用Thread类绕过rails默认验证:username,:uniqueness =>是一种好方法吗? true 并直接触发数据库验证..
答案 0 :(得分:0)
我认为你的意思是你试图测试Rails验证没有捕获重复值的竞争条件,但数据库确实存在?
如果是这样,您可以使用validate: false
跳过测试中的Rails验证:
it 'causes a database index constraint error' do
Foo.create!(bar: 'baz')
expect { Foo.create(bar: 'baz', validate: false) }.to raise_error
end
如果您想测试特定错误,您可能还应该查看raise_exception
匹配器而不是raise_error
。