【发布时间】:2014-10-25 00:20:36
【问题描述】:
今天早些时候,我开始遇到一个奇怪的 RSpec 问题,其中大约 5% 的测试刚刚停止通过。主要的共同点是大多数失败都与测试计算类中实例总数的情况有关(例如,expect(Object.count))。错误的类型是这样的:
预计:2 得到:10
我想进一步深入了解单个测试的细节,看看发生了什么。我发现每次运行测试时,特定对象的实例数都会增加一(即使我注释掉了测试的每个部分)。就像测试数据库在每次运行测试时都实例化一个对象,没有明显的原因。我检查了我的 rspec 配置以确保事务性装置设置为 true。我一直在寻找为什么测试数据库数据似乎没有被清除的问题的答案,而且似乎普遍的共识是“只使用数据库清洁器”。话虽如此,我还是能够通过插入使测试最终通过
DatabaseCleaner.strategy = :truncation DatabaseCleaner.clean
就在我的测试之前,但这似乎是一个笨拙的解决方案,因为有些人说它会减慢测试套件的速度。如果这不是问题的根源,我有点犹豫是否要在我的测试套件中创建一堆包含 Database Cleaner 的之前操作。我之前遇到过这个问题的变体(例如,测试数据库没有清除)。一般的想法是否只是在每次测试执行后无法始终依赖 Rspec 来回滚事务?
【问题讨论】:
-
这是一个主观问题......但显然它并没有在您的具体情况下回滚。您是否正在寻求帮助来解释为什么它对您的测试不起作用?如果是这样,请发布测试代码。
标签: rspec rspec-rails