2015-01-15 62 views
1

當前嘗試使用水豚/ rspec /工廠女孩測試多個數據庫,雖然有我的數據庫清理問題。database_cleaner,factory_girl和多個數據庫 - 配置

查詢錯誤:

': Mysql2::Error: Duplicate entry '1503' for key 'PRIMARY': INSERT INTO `users` 

Facilities_spec.rb

feature "User with facilities" do 
    @current_user = FactoryGirl.create(:user_with_facility) 
    scenario 'A user can perform a walk-through', :js => true do 
    login_as 
    visit '/' 
    expect(page).to have_text "Our records indicate that you have access to 1 facilities:" 
    ... 
    end 

    @current_user = FactoryGirl.create(:user_with_facility) 
    scenario 'The quick-form requires first_name, last_name, and dob', :js => true do 
    login_as 
    visit '/' 
    expect(page).to have_text "Our records indicate that you have access to 1 facilities:" 
    ... 
    end 
end 

rails_helper.rb

cleaner = DatabaseCleaner[:active_record,{:connection => :emp_portal_test}] 
rt_cleaner = DatabaseCleaner[:active_record, {connection: :test_rt_treats}] 

RSpec.configure do |config| 
config.include Capybara::DSL 
config.include FactoryGirl::Syntax::Methods 

config.use_transactional_fixtures = false 

config.before(:suite) do 
    cleaner.strategy = :truncation 
    rt_cleaner.strategy = :truncation  
end 

config.before(:each) do 
    cleaner.strategy = :truncation 
    rt_cleaner.strategy = :truncation 
    cleaner.start 
    rt_cleaner.start 
end 

config.before(:each, :js => true) do 
    cleaner.strategy = :truncation 
    rt_cleaner.strategy = :truncation 
end 

config.after(:each) do 
    cleaner.clean 
    rt_cleaner.clean 
end 

user_factory.rb

FactoryGirl.define do 
factory :user do 
    id 33065 
    first_name "Andrew" 
    last_name "Larson" 
    select_id "al44096" 
    factory :user_with_facility do 
     after(:create) do |user| 
     user.facility_assignments << create(:facility) 
     end 
    end 
    end 

factory :facility do 
    id 1550 
    ref_select_id 1550 
    status -1 
    name "St. Paul's Home & Apartments" 
    name_internal "St Paul's Home" 
    dept_id "R51" 
    ... 
end 

當我在這個測試環境中創建一個新的病人時,它會在我下次使用之前被擦除,儘管我無法在我的代碼中使用同一個current_user。

+0

你是如何管理多個數據庫連接?你是使用寶石還是手動做? – 2015-01-15 16:41:46

+0

不完全確定'管理'是什麼意思。我有清潔劑= DatabaseCleaner [:active_record,{:連接=>:emp_portal_test}] rt_cleaner = DatabaseCleaner [:active_record,{connection::test_rt_treats}]每個建立一個連接到數據庫以執行乾淨的任務。 – omgmakeme 2015-01-15 16:55:54

回答

0

好了,所以幾件......

  1. 我的一個數據庫表沒有一個自動遞增特性爲它的id,這將是一個問題,所以我通過增加自動遞增表...

    ALTER TABLE document MODIFY COLUMN document_id INT auto_increment 
    
  2. 解決此問題後,我的數據庫清理工作正常。

  3. 獎勵:我不知道,但是這兩種情況之間訪問@current_user我需要

    background do 
        @current_user = FactoryGirl.create(:user_with_facility) 
    end 
    
  4. 我還沒有看到這一點,直到如今,它的偉大。

    2 examples, 0 failures