Ruby on rails 由于唯一性验证,工厂机器人无法创建
型号Ruby on rails 由于唯一性验证,工厂机器人无法创建,ruby-on-rails,rspec,factory-bot,Ruby On Rails,Rspec,Factory Bot,型号 class User < ApplicationRecord has_many :tokens, :dependent => :destroy class Profile < ApplicationRecord belongs_to :user belongs_to :token class Token < ApplicationRecord belongs_to :user 工厂。rb FactoryBot.d
class User < ApplicationRecord
has_many :tokens, :dependent => :destroy
class Profile < ApplicationRecord
belongs_to :user
belongs_to :token
class Token < ApplicationRecord
belongs_to :user
工厂。rb
FactoryBot.define do
factory :user do
sequence(:email) { |n| "person#{n}@example.com" }
password {'blablabla'}
end
factory :token do
association :user, factory: :user
refresh_token {"XXXXX"}
end
factory :profile do
association :user, factory: :user
association :token, factory: :token
end
end
首先,有一种更简单的方法来定义关联:
FactoryBot.define do
工厂:用户做什么
顺序(:email){n|“person{n}@example.com”}
密码{'blabla'}
结束
工厂:代币
用户
刷新令牌{“XXXXX”}
令牌类型{'bearer'}
结束
工厂名称:profile do
用户
代币
结束
结束
接下来,如果您想在测试中使用与另一个记录关联的现有记录,您有两个选项
选项1-创建令牌并让它为您生成关联的用户:
token=create:token
user=token.user
选项2-您可以在创建令牌时传入关联的记录:
user=create:user
令牌=创建:令牌,用户:用户
首先,有一种更简单的方法来定义关联:
FactoryBot.define do
工厂:用户做什么
顺序(:email){n|“person{n}@example.com”}
密码{'blabla'}
结束
工厂:代币
用户
刷新令牌{“XXXXX”}
令牌类型{'bearer'}
结束
工厂名称:profile do
用户
代币
结束
结束
接下来,如果您想在测试中使用与另一个记录关联的现有记录,您有两个选项
选项1-创建令牌并让它为您生成关联的用户:
token=create:token
user=token.user
选项2-您可以在创建令牌时传入关联的记录:
user=create:user
令牌=创建:令牌,用户:用户
我只想使用电子邮件{FFaker::Internet.safe_email}
(添加FFaker gem),这将为您提供更好的测试数据,并让您花时间做一些更好的事情,然后调试一个序列,我会考虑这些问题。问题是我不想有两个不同的用户。它应该指的是同一个用户。我只会使用电子邮件{FFaker::Internet.safe_email}
(添加FFaker gem),这将为您提供更好的测试数据,并让您花时间做一些更好的事情,然后调试一个序列,这类问题困扰着您。好的,我会考虑。问题是我不想有两个不同的用户。它应该引用同一个用户。
FactoryBot.define do
factory :user do
sequence(:email) { |n| "person#{n}@example.com" }
password {'blablabla'}
end
factory :token do
association :user, factory: :user
refresh_token {"XXXXX"}
end
factory :profile do
association :user, factory: :user
association :token, factory: :token
end
end
factory :profile do
user
after(:create) do |profile, evaluator|
create(:token, profile: profile)
end
end