2017-06-13 113 views
0

我有2次集成測試,在這裏怎麼樣我們來看看:回報率:集成測試失敗

class TagFlowTest < ActionDispatch::IntegrationTest 

    include Devise::Test::IntegrationHelpers 

    setup do 
    sign_in FactoryGirl.create(:admin) 
    @partner = create(:partner) 
    end 

    test 'can see the list of partners' do 
    get '/partners' 
    assert_response :success 
    assert_select 'tr', 2 
    end 

... more tests below ... 

第二個測試看起來一樣 的事情是,當這個測試發射軌測試,它的正常工作。但是,當我啓動:

rails test /test/

我得到了一個錯誤:

UnexpectedError: ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_users_on_email"

據我所知,這個問題來自

sign_in FactoryGirl.create(:admin) 

當我刪除了其他測試這條線,它的工作。 但是,如果我這樣做,我不能只測試一個測試。我該如何解決這個問題?

回答

2
UnexpectedError: ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_users_on_email" 

那麼這個錯誤是什麼意思?您在模型級別或數據庫級別有一些驗證,它們不會讓您爲Admin創建重複的電子郵件。

因此,我認爲您用來創建管理員的工廠不會創建唯一的電子郵件地址。

試試這個

FactoryGirl.define do 
    factory :admin do 
    # your code 
    email { Faker::Internet.email } 
    end 
end 

但是這件事情需要攤販寶石。如果你不想爲此使用寶石,請嘗試在工廠女孩中使用序列。

當運行測試時,還可以將數據庫置於乾淨狀態。考慮使用https://github.com/DatabaseCleaner/database_cleaner