2013-04-28 56 views
1

我正在使用rspec来测试,我注意到在运行测试后,它有时会在测试数据库中留下一些记录。我不知道为什么。我在我的配置文件中将use_transactional_fixtures设置为true。但是,直到我手动删除记录时,它们才会消失。有没有人有办法阻止它?轨道测试数据库没有清除一些运行后

编辑;之前我说过只有在测试失败的时候。这不再是事实。

回答

4

我发现了这个问题。 Before(:all) blocks are not transactional

+0

更好的来源[文档](https: //www.relishapp.com/rspec/rspec-rails/v/3-5/docs/transactions):*在'before(:all)'中创建的数据不会回滚*。 – 2017-01-22 10:39:37

0

尝试database_cleaner宝石。

截断或交易策略将适用于您。

小心:它可以使您的测试套件运行非常缓慢。
通常,在RSpec中正确使用before,after(如果您使用的话)通常很好。

+1

你以前和以后的意思是什么意思?什么会不当使用?这不是我每次看到的问题。我只是不知道是什么会导致它留下记录,所以我想停止这样做,而不是添加新的宝石。 – bdwain 2013-04-28 23:54:07

+1

这是测试套件中的事情 - 不管我们怎么想,数据在数据库中都会存在,当它不应该时。我几乎花了好几天的时间试图让工厂工作。上次,我被迫使用这颗宝石,因为这个。尽管它完成了这项工作。 :) – kiddorails 2013-04-29 17:41:24

+0

我认为,如果您避免在块之外和之前/之后创建东西(:所有)(以及其他任何不按每个示例运行的东西,您应该很好 – bdwain 2013-04-29 19:15:05