我在使用 Rails 4 并注意到我的一些 RSpec 测试失败了,因为我的一些测试重构使用了前置过滤器(大概是因为事务)。这篇文章描述了一个类似的问题:
rails test database not clearing after some runs
代替使用 DatabaseCleaner gem,是否有清除测试数据库的 rake 命令?我相信 rake db:test:prepare
在 Rails 4 中被弃用了。此外,如果在交易之前,如
`post :create, user: Fabricate.attributes_for(:user)`
是持久性的,是否有另一种重构方式来避免手动清除测试数据库的需要?
最佳答案
矫枉过正的解决方案是:
bundle exec rake db:drop RAILS_ENV=test
bundle exec rake db:create RAILS_ENV=test
bundle exec rake db:schema:load RAILS_ENV=test
你可以把这一切都放在一个 rake 任务中并运行它。
来自 here 的另一个解决方案是包含以下您的 spec_helper.rb
文件
config.after :all do
ActiveRecord::Base.subclasses.each(&:delete_all)
end
免责声明:我没有对此进行测试,您应该阅读 SO post因为它可能并非在所有情况下都有效。
话虽如此,我建议使用数据库清理器 gem 来避免此类情况。
关于ruby-on-rails - rails 4 : How to reset test database?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25877734/