why database_cleaner doesn't clean?

I have two models, Sector e Category. Category has_many :sectors. I use database_cleaner e rspec call it through this file:

RSpec.configure do |config|   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 end

The test for model Sector is:

describe Sector do   before(:each) do     @attr = { :name => "Sector-1" }   end

  it "should create a new instance given valid attributes" do     Sector.create!(@attr)   end

  it "should require a name" do     no_name_sector = Sector.new(@attr.merge(:name => ""))     no_name_sector.should_not be_valid   end end

It passes and the db is cleaned. The test for Category is:

describe Category do   before(:each) do     sector = Sector.make!     @attr = { :name => "Category-1", :sector => sector}   end

  it "should create a new instance given valid attributes" do     Category.create!(@attr)   end

  it "should require a name" do     no_name_category = Category.new(@attr.merge(:name => ""))     no_name_category.should_not be_valid   end

  it "should require a Sector" do     no_sector_category = Category.new(@attr.merge(:sector => nil))     no_sector_category.should_not be_valid   end end

Also this test passes but the db is not cleaned and I have 3 Sectors. Do you know why the db is not cleaned when I run Category test?

Try posting a bit of the test.log to seed what is happening to the db

REMOVE ME

Sorry I've found that the problem is when I run autotest. If I run rspec individually for every controller they passes. If I run autotest they don't pass. For sector controller test I've posted the code, if I run rspec for it passes. If I run autotest it says:

SectorsController GET index assigns all sectors as @sectors      Failure/Error: assigns(:sectors).should eq([sector])

       expected [#<Sector id: 2603, name: "Sector-1", created_at: "2011-06-02 18:20:15", updated_at: "2011-06-02 18:20:15">]             got [#<Sector id: 2548, name: "Sector-1", created_at: "2011-06-02 18:19:46", updated_at: "2011-06-02 18:19:46">, #<Sector id: 2549, name: "Sector-1", created_at: "2011-06-02 18:19:46", updated_at: "2011-06-02 18:19:46">, #<Sector id: 2550

etc.

REMOVE ME

To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.

In the configuration of database_cleaner I've changed DatabaseCleaner.strategy = :transaction to DatabaseCleaner.strategy = :deletion and when I run autotest now the tests pass. I've to use DatabaseCleaner.strategy = :transaction when I run rspec individually for every spec and DatabaseCleaner.strategy = :deletion when I run autotest?

+1 Conrad

Careful what ask for :slight_smile: