Harbinger
Harbinger

Reputation: 155

Database not cleaning when testing Controllers with RSpec

When testing my Models with RSpec I use the following code to clean my database:

config.before(:suite) do
  begin
    DatabaseCleaner.start
  ensure
    DatabaseCleaner.clean
  end
end

config.after(:suite) do
  DatabaseCleaner.clean_with(:truncation)
end

All my Model tests pass, but when I test my controllers they appear to use the same dataset that my models operate on, making my tests error out.

I can get my Controller tests to pass by using this code instead:

config.before(:suite) do
  DatabaseCleaner.strategy = :transaction
  DatabaseCleaner.clean_with(:truncation)
end

config.before(:each) do
  DatabaseCleaner.start
end

config.after(:each) do
  DatabaseCleaner.clean
end

This however, causes my Model tests to fail. Any advice on how to either combine these blocks without breaking one set of tests or the other?

Upvotes: 0

Views: 891

Answers (1)

John Paul Ashenfelter
John Paul Ashenfelter

Reputation: 3143

You didn't mention any specific versions of database_cleaner, nor your database. But the latest config for database_cleaner in RSpec uses an around filter

https://github.com/DatabaseCleaner/database_cleaner#rspec-example

Upvotes: 1

Related Questions