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手动执行,只要你想清除你的数据库,但是。