Database Cleaner not working in minitest rails

database-cleaner, ruby, ruby-on-rails-3.2

Solution

Short answer:

gem install "minitest-around"

Long answer:

before/after or setup/teardown in minitest are NOT hooks as in rspec, therefore you can't have multiple before/after or setup/teardown in minitest, since what they do is just redefining the method.

To solve this issue, you can use `minitest-around`, which adds support for multiple `before`/`after` or `setup`/`teardown` and `around`, simply add the gem to your test group:

# put in your Gemfile
gem 'minitest-around', group: :test

For setting up the database_cleaner, you can have it as you want, following is an example of the setup:

# tests/support/database_cleaner.rb
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)

class Minitest::Rails::ActionController::TestCase
  def setup
    DatabaseCleaner.start
  end

  def teardown
    DatabaseCleaner.clean
  end
end

And in your test files:

# tests/your/test/file_test.rb
require 'support/database_cleaner'

# assertions here ...

That's it, see the Github for detailed info.

Problem

My Minitest controller tests are working fine if I run them alone using `rake minitest:controllers` but when I run `rake minitest:all` then I get validation failed error. It is because email is already used in model tests. I used DatabaseCleaner to clean the database but unable to clean database. My code for database cleaner: ``` require "database_cleaner" DatabaseCleaner.strategy = :transaction class MiniTest::Rails::ActionController::TestCase include Devise::TestHelpers def setup DatabaseCleaner.start end def teardown DatabaseCleaner.clean end ```

Original source