2016-06-20 17 views
1

我在我的app/services文件夾中有一些服務。現在我想測試這些服務,所以我使用rspec和factorygirl。我與factoryGirl創建用戶,但是當我運行rspec的它顯示我以下錯誤如何使用rails配置database_cleaner

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

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

我使用database_cleaner寶石清潔每次測試後的數據庫。 下面是我的配置文件

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 

我不知道我要去的地方錯了。

+0

你確定你是不是要一個簡單的例子中創建2個用戶使用相同的電子郵件? –

回答

2

你需要指定每個規格(事務這裏是一個安全的選擇)之間使用的策略:

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 
相關問題