我正在嘗試運行非常基本的規格測試,並且因錯誤「名稱已被佔用」而失敗。RSpec/FactoryGirl中有多個關聯的「名稱已被佔用」
更新屬於用戶誰擁有許多角色。
用戶模型
# == Schema Information
#
# Table name: users
#
# id :integer not null, primary key
# email :string default(""), not null
#
FactoryGirl.define do
factory :user_engineer, class: User do
id 1
email '[email protected]'
roles {[FactoryGirl.create(:engineer)]}
end
end
角色模型
# == Schema Information
#
# Table name: roles
#
# id :integer not null, primary key
# name :string
# description :text
#
FactoryGirl.define do
factory :engineer, class: Role do
id 3
name 'Engineer'
description 'He is the chosen one'
end
end
更新模型
# == Schema Information
#
# Table name: updates
#
# id :integer not null, primary key
# content :text
# user_id :integer
# ticket_id :integer
#
FactoryGirl.define do
factory :update do
content "This is a test update"
association :user, factory: :user_engineer
end
end
update_spec.rb
require 'rails_helper'
RSpec.describe Update, type: :model do
let(:update){ FactoryGirl.create :update }
it { expect(update).to be_valid }
end
這是錯誤:
Update
example at ./spec/models/update_spec.rb:19 (FAILED - 1)
Failures:
1) Update
Failure/Error: roles {[FactoryGirl.create(:engineer)]}
ActiveRecord::RecordInvalid:
Validation failed: Name has already been taken
我怎樣才能通過測試?
編輯:通過添加序列行我建議,我得到的運行RAILS_ENV=test rake db:drop
後出現以下錯誤:
1) Update
Failure/Error: roles {[FactoryGirl.create(:engineer)]}
ActiveRecord::RecordNotUnique:
PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "roles_pkey"
DETAIL: Key (id)=(3) already exists.
: INSERT INTO "roles" ("id", "name", "description", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id"
你可以只運行這個'{expect {update(update).to be_valid}'spec,並看到錯誤是否到來。我認爲這個錯誤來自其他代碼的副作用。 –
我應該發佈哪些可以幫助調試的內容? – ftshtw
好的,告訴我'it {expect {update(update)to_valid}'的行號和文件名。 –