测试唯一索引Mysql2:RSpec中的错误

时间:2017-11-16 09:56:58

标签: ruby-on-rails rspec

我的模型中有一个permalink字段,它在Rails中具有唯一性验证,在MySQL中具有唯一索引。 当我通过我的API导入数据时,有时会发生两个请求对permalink具有相同的值,并且他们会尝试同时保存。

在这种情况下,我没有得到唯一性验证错误,我收到错误:

ActiveRecord::RecordNotUnique: Mysql2::Error: Duplicate entry 'permalink123' for key 'index_products_on_permalink'

我通过在救援块中保存保存来处理这种情况,在永久链接的末尾添加一个随机值并尝试再次保存。当第二次保存也产生错误时,它会被引发。

但是如何在RSpec中测试这种行为?我尝试在测试期间使用

禁用唯一性验证
Product.class_eval do
  validates :permalink, uniqueness: false
end

但这不会引发MySQL错误。我也不认为用expect(product).to receive(:save).and_raise(Mysql2::Error)来纠正错误是正确的方法,因为当错误类和/或错误字符串发生变化时会发生什么?

有没有办法,我可以在测试期间生成Mysql2:Error,这是由mysql的唯一索引错误引起的?

1 个答案:

答案 0 :(得分:0)

1)如果测试数据库没有抛出相同的错误,那么对存储进行存根以提出正确的错误似乎很好:)这绝对不是理想的但是在一天结束时它是一个测试所以你只是想确保你按照预期的方式处理这种情况。评论为什么虽然肯定是有序的!

2)我认为这取决于您如何配置测试数据库。根据我的经验,FactoryGirl不会抛出特别恼人的索引错误...