Ruby-on-rails – Rails 4: How to reset test database

rspecrubyruby-on-rails

I'm on Rails 4 and have noticed some of my RSpec tests are failing because some of my test refactorings use a before filter (presumably because of transactions). This post describes a similar issue:

rails test database not clearing after some runs

In lieu of using the DatabaseCleaner gem, is there a rake command to clear out the test database? I believe rake db:test:prepare is deprecated in Rails 4. Also, if before transactions like

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

are persistent, is there an alternative way of refactoring to avoid the need to manually clear out the test database?

Best Answer

An overkill solution would be:

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

You could make this all in a rake task and run that.

Another solution from here is to include the following your spec_helper.rb file

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

Disclaimer: I have not tested this and you should read the SO post as it may not work in all situations.

That being said, I would recommend using the database cleaner gem to avoid situations such as this.