Rails 4:如何重置testing数据库?

我在Rails 4上,注意到我的一些RSpectesting失败了,因为我的一些testing重构使用了beforefilter(大概是因为事务)。 这篇文章描述了类似的问题:

一些运行后,轨道testing数据库不清除

代替使用DatabaseCleaner gem,是否有一个rake命令来清除testing数据库? 我相信rake db:test:prepare是在Rails 4中弃用。此外,如果之前的交易

 post :create, user: Fabricate.attributes_for(:user) 

是持久的。 有没有其他的重构方式,以避免需要手动清除testing数据库?

过度的解决scheme将是:

 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 

你可以把这一切都在一个耙子任务,并运行。

这里的另一个解决scheme是包含以下你的spec_helper.rb文件

 config.after :all do ActiveRecord::Base.subclasses.each(&:delete_all) end 

免责声明:我没有testing过这个,你应该阅读SOpost,因为它可能不适用于所有情况。

这就是说,我会build议使用数据库清洁gem,以避免这样的情况。

有可能:

 bundle exec rake db:reset RAILS_ENV=test 

您可以添加一个后filter删除有关表中的所有条目。

理论上这个ActiveRecord::Migration.maintain_test_schema! 应该做的伎俩。 把它放在rails_helper.rb

最后,我写了一个简单的rake任务,根据执行的命令删除/迁移(或删除和迁移)所有testing和开发数据库。

它包括提示用户是否希望在发生错误时继续使用的function,并使用Open3的popen3方法(以便我们可以访问stdin,stdout和stderr;并且任何失败的命令都不会导致rake任务的进程中止(与使用系统不同))。

希望这有助于某人。 🙂

https://github.com/xtrasimplicity/rake_all_db_helper/

编辑:这将需要从你的shell手动执行,只要你想清除你的数据库,但是。