运行测试时,FactoryGirl的索引重复输入

mal*_*tor 5 rspec ruby-on-rails rspec2 ruby-on-rails-3 factory-bot

我正在使用FactoryGirl创建一个"专业"模型,该模型在code列上具有唯一索引.

当我创建"专业"模型的多个工厂时,我收到此错误:

Failure/Error: Factory(:specialty)
Mysql::Error: Duplicate entry 'AN00' for key 'index_specialties_on_code': INSERT INTO `specialties` (`code`, `name`) VALUES ('AN00', 'Name')
Duplicate entry 'AN00' for key 'index_specialties_on_code'
Run Code Online (Sandbox Code Playgroud)

处理这个问题的正确方法是什么?为什么与模型相关的索引不会被模型所震撼.我正在使用DatabaseCleaner.

Mau*_*res 3

为您的工厂添加序列:

Factory.sequence :code do |n|
  "AAA#{n}"
end
Run Code Online (Sandbox Code Playgroud)

在您的专业工厂中,请使用以下顺序:

Factory.define :specialty do |f|
  f.code { Factory.next(:code) }
  # other assignments here
end
Run Code Online (Sandbox Code Playgroud)

这样您将始终拥有新的代码。