DatabaseCleaner + RSpec : what is the correct configuration?
database-cleaner, rspec, rspec-rails, ruby-on-rails, ruby-on-rails-4
Solution
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: 'git@github.com:DatabaseCleaner/database_cleaner.git'
Problem
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?