使用Rails系统测试时仍需DatabaseCleaner吗?
Rails 5.1系统测试:数据库事务处理的优化
根据我对Rails 5.1新系统测试的了解,现在Rails已经会在内部处理数据库事务了,这解决了之前系统测试里的一大痛点。
RSpec相关内容里提到过:
「[此前]测试与被测代码无法共享数据库事务,因此无法使用RSpec内置机制回滚数据库变更,而需要DatabaseCleaner这类gem。在系统测试中,Rails团队已解决该问题,因此可安全使用RSpec的机制……」
简单拆解一下这个变化:
- 在Rails 5.1之前,系统测试的代码和测试本身没办法共用同一个数据库事务,导致测试执行完后,数据库里的变更没法通过RSpec自带的回滚机制清理,必须借助DatabaseCleaner这类第三方gem来重置数据库状态。
- 而Rails 5.1的系统测试模块修复了这个问题,现在你可以直接依赖RSpec内置的事务回滚功能来处理测试后的数据库,不用再额外引入其他工具了。
内容的提问来源于stack exchange,提问作者Andy Harvey
相关产品推荐
相关产品推荐

