2017-06-13 133 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