I would like to replace our current db cleaning strategy (fixture transactions) with DatabaseCleaner. You can find more description of DatabaseCleaner at https://github.com/bmabey/database_cleaner Any feedback and discussion is very welcome.
From: Ladislav Martincik lmartinc@redhat.com
- Better than default Rails transactional fixtures - Good fit when mixing fixtures with factories - No need to turn transactional fixtures when using transactions --- src/spec/services/registration_service_spec.rb | 12 +----------- src/spec/spec_helper.rb | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 12 deletions(-)
diff --git a/src/spec/services/registration_service_spec.rb b/src/spec/services/registration_service_spec.rb index 6764715..7b26c63 100644 --- a/src/spec/services/registration_service_spec.rb +++ b/src/spec/services/registration_service_spec.rb @@ -2,9 +2,7 @@ require 'spec_helper'
describe RegistrationService do
- before(:all) do - MetadataObject.delete_all - Role.delete_all + before(:each) do Factory.create(:default_quota_metadata) Factory.create(:default_role_metadata) Factory.create(:default_pool_metadata) @@ -48,14 +46,6 @@ describe RegistrationService do
describe "with transaction" do
- before(:all) do - ActiveSupport::TestCase.use_transactional_fixtures = false - end - - after(:all) do - ActiveSupport::TestCase.use_transactional_fixtures = true - end - it "doesn't save user if quota save! raise error and return false if validation failed" do user_attributes = Factory.attributes_for(:user) user = User.new(user_attributes) diff --git a/src/spec/spec_helper.rb b/src/spec/spec_helper.rb index 52e5de0..12727d8 100644 --- a/src/spec/spec_helper.rb +++ b/src/spec/spec_helper.rb @@ -6,6 +6,7 @@ require 'spec/autorun' require 'spec/rails' require 'authlogic/test_case' require 'timecop' +require 'database_cleaner'
# Uncomment the next line to use webrat's matchers #require 'webrat/integrations/rspec-rails' @@ -18,7 +19,7 @@ Spec::Runner.configure do |config| # If you're not using ActiveRecord you should remove these # lines, delete config/database.yml and disable :active_record # in your config/boot.rb - config.use_transactional_fixtures = true + config.use_transactional_fixtures = false config.use_instantiated_fixtures = false config.fixture_path = RAILS_ROOT + '/spec/fixtures/'
@@ -60,4 +61,17 @@ Spec::Runner.configure do |config| config.after(:each, :type => :controller) do #current_user_session.destroy end + + # Database cleaner + config.before(:suite) do + DatabaseCleaner.strategy = :truncation + DatabaseCleaner.clean_with(:truncation) + end + config.before(:each) do + DatabaseCleaner.start + end + + config.after(:each) do + DatabaseCleaner.clean + end end
On 11/11/2010 12:36 PM, lmartinc@redhat.com wrote:
From: Ladislav Martinciklmartinc@redhat.com
- Better than default Rails transactional fixtures
- Good fit when mixing fixtures with factories
- No need to turn transactional fixtures when using transactions
src/spec/services/registration_service_spec.rb | 12 +----------- src/spec/spec_helper.rb | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 12 deletions(-)
diff --git a/src/spec/services/registration_service_spec.rb b/src/spec/services/registration_service_spec.rb index 6764715..7b26c63 100644 --- a/src/spec/services/registration_service_spec.rb +++ b/src/spec/services/registration_service_spec.rb @@ -2,9 +2,7 @@ require 'spec_helper'
describe RegistrationService do
- before(:all) do
- MetadataObject.delete_all
- Role.delete_all
- before(:each) do Factory.create(:default_quota_metadata) Factory.create(:default_role_metadata) Factory.create(:default_pool_metadata)
@@ -48,14 +46,6 @@ describe RegistrationService do
describe "with transaction" do
- before(:all) do
ActiveSupport::TestCase.use_transactional_fixtures = false
- end
- after(:all) do
ActiveSupport::TestCase.use_transactional_fixtures = true
- end
it "doesn't save user if quota save! raise error and return false if validation failed" do user_attributes = Factory.attributes_for(:user) user = User.new(user_attributes)
diff --git a/src/spec/spec_helper.rb b/src/spec/spec_helper.rb index 52e5de0..12727d8 100644 --- a/src/spec/spec_helper.rb +++ b/src/spec/spec_helper.rb @@ -6,6 +6,7 @@ require 'spec/autorun' require 'spec/rails' require 'authlogic/test_case' require 'timecop' +require 'database_cleaner'
# Uncomment the next line to use webrat's matchers #require 'webrat/integrations/rspec-rails' @@ -18,7 +19,7 @@ Spec::Runner.configure do |config| # If you're not using ActiveRecord you should remove these # lines, delete config/database.yml and disable :active_record # in your config/boot.rb
- config.use_transactional_fixtures = true
- config.use_transactional_fixtures = false config.use_instantiated_fixtures = false config.fixture_path = RAILS_ROOT + '/spec/fixtures/'
@@ -60,4 +61,17 @@ Spec::Runner.configure do |config| config.after(:each, :type => :controller) do #current_user_session.destroy end
- # Database cleaner
- config.before(:suite) do
- DatabaseCleaner.strategy = :truncation
- DatabaseCleaner.clean_with(:truncation)
- end
- config.before(:each) do
- DatabaseCleaner.start
- end
- config.after(:each) do
- DatabaseCleaner.clean
- end end
ACK, looks good (though running tests takes 2.5 times more time now, but it's not important)
deltacloud-devel@lists.fedorahosted.org