2016-06-20 15 views
1

Ich habe einige Dienste in meinem Ordner app/services.Jetzt möchte ich diese Dienste testen, also verwende ich rspec und factorygirl. Ich schaffe Benutzer factory, aber wenn ich rspec leite es mir zeigt Fehler folgendeSo konfigurieren Sie database_cleaner mit Rails

Failure/Error: @user ||= FactoryGirl.create(:user) 

ActiveRecord::RecordInvalid: 
    Validation failed: Email has already been taken 

ich database_cleaner gem bin mit der Datenbank nach jedem Test zu reinigen. Unten ist meine Konfigurationsdatei

ENV['RAILS_ENV'] ||= 'test' 
require File.expand_path('../../config/environment', __FILE__) 
abort("The Rails environment is running in production mode!") if Rails.env.production? 

require 'spec_helper' 
require 'rspec/rails' 
require 'factory_girl_rails' 
require 'database_cleaner 
ActiveRecord::Migration.maintain_test_schema! 

RSpec.configure do |config| 

    config.include FactoryGirl::Syntax::Methods 

    config.fixture_path = "#{::Rails.root}/spec/fixtures" 
    config.include Devise::TestHelpers, type: :controller 

    config.use_transactional_fixtures = false 

    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 


    config.infer_spec_type_from_file_location! 
    config.filter_rails_from_backtrace! 

end 

Ich weiß nicht, wo ich falsch werde.

+0

Sind Sie sicher, dass Sie nicht mehr als 2 Teilnehmer mit der gleichen E-Mail in einem einzigen Beispiel versuchen, zu erstellen? –

Antwort

2

Sie müssen die Strategie festlegen zwischen dem einzelnen Spezifikationen zu verwenden (Transaktion ist eine sichere Wahl hier):

RSpec.configure do |config| 
    config.before(:suite) do 
    DatabaseCleaner.clean_with(:truncation) 
    end 

    config.before(:each) do 
    DatabaseCleaner.strategy = :transaction 
    end 

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

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