Sol*_*tes 75 ruby rspec ruby-on-rails
我在Rails 4上并注意到我的一些RSpec测试失败了,因为我的一些测试重构使用了一个前置过滤器(可能是因为交易).这篇文章描述了类似的问题:
代替使用DatabaseCleaner gem,是否有rake命令来清除测试数据库?我相信rake db:test:prepare
在Rails 4中已被弃用.另外,如果之前的交易喜欢
post :create, user: Fabricate.attributes_for(:user)
Run Code Online (Sandbox Code Playgroud)
坚持不懈 是否有另一种重构方法可以避免手动清除测试数据库?
Chr*_*hol 107
一个矫枉过正的解决方案是:
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
Run Code Online (Sandbox Code Playgroud)
你可以在rake任务中完成这一切并运行它.
此处的另一个解决方案是包含以下spec_helper.rb
文件
config.after :all do
ActiveRecord::Base.subclasses.each(&:delete_all)
end
Run Code Online (Sandbox Code Playgroud)
免责声明:我没有对此进行测试,您应该阅读SO帖子,因为它可能无法在所有情况下使用.
话虽这么说,我建议使用数据库清理器gem来避免这种情况.
mpz*_*mpz 83
有可能:
bundle exec rake db:reset RAILS_ENV=test
Run Code Online (Sandbox Code Playgroud)
有时您可能需要运行此命令(可选)
rails db:environment:set RAILS_ENV=test
但是确保清除测试数据库应该很简单:
rails db:drop db:create db:migrate RAILS_ENV=test