gpt4 book ai didi

testing - RSpec 和 Factory Girl - 建立独特的联系?

转载 作者:行者123 更新时间:2023-11-28 20:01:47 27 4
gpt4 key购买 nike

反馈 模型需要一个帐户 才能存在。每个 account 都有一个在模型中验证的唯一 :uuid:validates :uuid, presence: true, uniqueness: true

我正在使用 rspec 来测试反馈模型,并且每当我构建一个 feedback 对象时,总是收到 Uuid has already been taken 错误,因为反馈正在构建一个关联的 账号

规范/模型/feedback_spec.rb

require "spec_helper"

describe Feedback do
it "is valid with a message" do
expect(build(:feedback)).to be_valid
end

it "is invalid without a message" do
expect(build(:feedback, message: nil)).to have(1).errors_on(:message)
end

it "is invalid without an associated account" do
expect(build(:feedback, account: nil)).to have(1).errors_on(:account)
end
end

spec/factories/feedbacks.rb

FactoryGirl.define do
factory :feedback do
association :account
message Faker::Lorem.paragraphs
end
end

spec/factories/accounts.rb

FactoryGirl.define do
factory :account do
# uuid SecureRandom.uuid # THIS LINE WILL NOT WORK
sequence(:uuid) { |n| n } # THIS LINE WORKS
active true
end
end

正如您从 accounts.rb 工厂看到的那样,当我在 >feedback_spec.rb 文件。

我想知道,FactoryGirl 是否只构建一次帐户对象,然后将其重新用于每个单独的测试?我期待每个帐户对象都有一个唯一的 UUID,但这显然行不通。但是,当我切换到使用 sequence(:uuid) { |n| n 行它工作得很好。

试图了解 FactoryGirl 如何创建这些用于测试的对象。这显然不是我的想法。我的测试现在可以正常运行,但我不明白的事情最终会回来困扰我。

最佳答案

试试这个:

FactoryGirl.define do
factory :account do
uuid { SecureRandom.uuid }
active true
end
end

这将在调用帐户工厂时评估 SecureRandom.uuid,而不是仅在 FactoryGirl 定义它的工厂时计算一次。

编辑:

参见 Factory Girl Lazy Attributes了解更多信息。

关于testing - RSpec 和 Factory Girl - 建立独特的联系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20829780/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com