RoR:集成测试失败

时间:2017-06-13 13:50:26

标签: ruby-on-rails ruby testing devise

我有两个集成测试,这里看起来如何:

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:   错误:重复键值违反唯一约束   “index_users_on_email”

我知道问题来自

sign_in FactoryGirl.create(:admin)

当我在另一个测试中删除此行时,它正在工作。 但如果我这样做,我不能只测试一个测试。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

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

但这件事需要faker宝石。如果您不想仅仅为此使用宝石,请尝试在工厂女孩中使用序列。

在运行测试时,让数据库处于干净状态也很不错。考虑使用https://github.com/DatabaseCleaner/database_cleaner