如何解决由于唯一性验证,Factory Bot无法创建
模型
window.addEventListener("message",event => {
// TODO: in real code,you should check `event.origin` here!
const v = document.getElementById("a-video-element");
v.src = URL.createObjectURL(event.data);
},false);
当我调用配置文件创建时,它会执行以下操作:
- 创建一个ID为= 1,user_id = 1,token_id = 1的配置文件
- 创建ID为1, user_id = 2 的令牌
所以我用iD = 2创建了另一个用户,但应该是相同的user_id = 1 如果我尝试删除序列(:email),它将返回用户电子邮件唯一性的验证错误。
测试
class User < ApplicationRecord
has_many :tokens,:dependent => :destroy
class Profile < ApplicationRecord
belongs_to :user
belongs_to :token
class Token < ApplicationRecord
belongs_to :user
Factories.rb
it 'test' do
create(:profile)
end
解决方法
首先,有一种更简单的方法来定义关联:
FactoryBot.define do
factory :user do
sequence(:email) { |n| "person#{n}@example.com" }
password {'blablabla'}
end
factory :token do
user
refresh_token {"XXXXX"}
token_type {'bearer'}
end
factory :profile do
user
token
end
end
接下来,如果要在测试中与另一个记录关联使用现有记录,则有两个选择。
选项1-创建令牌并让其为您生成关联的用户:
token = create :token
user = token.user
选项2-创建令牌时,您可以传递关联记录:
user = create :user
token = create :token,user: user
,
factory :profile do
user
after(:create) do |profile,evaluator|
create(:token,profile: profile)
end
end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。