Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

DatabaseCleaner + RSpec : what is the correct configuration?

I included database_cleaner gem in my rails app. Followed the example given on the git repo and included the following code in spec_helper :

Approach 1

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

  config.around(:each) do |example|
   DatabaseCleaner.cleaning do
    example.run
   end
  end

When i run the rspec i get error as NoMethodError:undefined method 'cleaning' for DatabaseCleaner:Module.

So i did some research and found that i could replace the config.around block above with something like this :

Approach 2

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

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

OR

Approach 3

config.around(:each) do |example|
  DatabaseCleaner.start
  example.run
  DatabaseCleaner.clean
end

Both Approach 2 and 3 work well.
I also looked in the git repo of database_cleaner and found that cleaning method actually exists and with the following code :

def cleaning(&block)
     start
     yield
     clean
   end

which is exactly same as what i did in example 3. If it does exists then why is it not accessible? Am i missing something here. Any more setup? Or is Approach 2 or 3 preferable?

like image 566
Kirti Thorat Avatar asked Feb 01 '14 04:02

Kirti Thorat


2 Answers

Finally found the answer,

database_cleaner gem added the cleaning method just last week and also updated the documentation for the same. BUT this change is not available in latest gem version 1.2.0 which I sourced from rubygems.org. Approach 1 works perfectly when i source the gem from github as below:

gem 'database_cleaner', git: '[email protected]:DatabaseCleaner/database_cleaner.git' 
like image 133
Kirti Thorat Avatar answered Sep 22 '22 22:09

Kirti Thorat


You can use the approach in the documentation if you pull the gem from Github

gem 'database_cleaner', git: '[email protected]:bmabey/database_cleaner.git'

like image 37
tagCincy Avatar answered Sep 20 '22 22:09

tagCincy