首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试唯一索引mysql2: RSpec出错

测试唯一索引mysql2: RSpec出错
EN

Stack Overflow用户
提问于 2017-11-16 17:56:58
回答 1查看 480关注 0票数 0

我的模型中有一个permalink字段,它在Rails中有唯一性验证,在MySQL中有唯一索引。当我通过我的应用程序接口导入数据时,有时会发生这样的情况,两个请求具有相同的permalink值,并且它们试图同时保存。

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

代码语言:javascript
复制
ActiveRecord::RecordNotUnique: Mysql2::Error: Duplicate entry 'permalink123' for key 'index_products_on_permalink'

我处理这种情况的方法是在一个拯救块中扭曲保存,在固定链接的末尾添加一个随机值,然后再次尝试保存。当第二次保存也产生错误时,将引发该错误。

但是如何在RSpec中测试这种行为呢?在测试过程中,我尝试禁用唯一性验证。

代码语言:javascript
复制
Product.class_eval do
  validates :permalink, uniqueness: false
end

但这不会抛出MySQL错误。我也不认为用expect(product).to receive(:save).and_raise(Mysql2::Error)截断错误是正确的方法,因为当error类和/或error字符串发生更改时会发生什么?

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

EN

回答 1

Stack Overflow用户

发布于 2017-11-16 18:56:08

1)如果测试数据库没有抛出相同的错误,那么通过存根保存来引发正确的错误对我来说似乎没什么问题:)这肯定不是很理想,但归根结底,这是一项测试,所以您只想确保以您期望的方式处理这种情况。不过,关于原因的评论绝对是合情合理的!

2)我相信这取决于您如何配置测试数据库。根据我的经验,FactoryGirl不会抛出唯一的索引错误,这是特别烦人的……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47326551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档