0
我正在嘗試運行一個腳本的規範,以獨立化給定的表。我如何禁用RSpec測試中的MySQL唯一約束
我現在在我的遷移中有獨特的約束,所以我很難創建重複測試我的腳本。
我目前的規格是這樣的。
require 'spec_helper'
describe OneTime::UniquifyTypeDescriptorContext do
before(:each) do
duplicated_type_descriptor_contexts = FactoryGirl.build_list(:type_descriptor_context, 5, {:type_name => :foo})
ActiveRecord::Base.connection.execute('SET unique_checks=0;')
duplicated_type_descriptor_contexts.each{|tdc| tdc.save!(:validate => false)}
ActiveRecord::Base.connection.execute('SET unique_checks=1;')
FactoryGirl.create(:type_descriptor_context, :type_name => :bar)
end
context "#process!" do
it "should remove duplicates" do
OneTime::UniquifyTypeDescriptorContext.new.process!
expect(TypeDescriptorContext.count).to eq 2
end
end
end
但它一直在失敗上
ActiveRecord::RecordNotUnique:
ActiveRecord::JDBCError: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'foo' for key 'index_type_descriptor_contexts_on_type_name': INSERT INTO `type_descriptor_contexts` (`created_at`, `type_name`, `updated_at`) VALUES ('2015-10-06 18:23:39', 'foo', '2015-10-06 18:23:39')
難道我失去了一些東西?
我不得不問,爲什麼你需要擁有/測試功能,在表中記錄獨特化的記錄不能創建重複記錄? – Magnuss
因爲情況並非如此。我添加了一個遷移來添加約束,但我需要先運行該腳本以刪除重複項。我的規格從運行所有遷移開始,以便運行添加約束條件的那個,並且我無法創建不良數據來測試腳本。 –