Rspec 使用负载均衡器插入数据库的验证测试

Rspec validation test for DB insert with Load Balancer

我正在尝试创建一个涵盖以下场景的 rspec 测试。 有一个具有列唯一索引的模型。在真实世界的环境中,我有一个负载平衡器并想模拟创建行为,因此当插入两个重复记录时,将触发数据库验证。使用 Thread class 绕过 rails 默认值 validates :username, :uniqueness => true 并直接触发数据库验证是否是一种好方法..

我假设您的意思是您正在尝试测试 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