gpt4 book ai didi

ruby-on-rails - 尝试使用 Rspec 和 FactoryGirl 创建列表时验证失败?

转载 作者:行者123 更新时间:2023-12-04 06:30:40 26 4
gpt4 key购买 nike

我有一个测试失败

Secret#last_five returns the last 5 secrets when last_five is called
Failure/Error: let!(:secrets){create_list(:secret, 5)}

ActiveRecord::RecordInvalid:
Validation failed: Email has already been taken

错误,我不确定如何修复它。

这是 secret_spec.rb 中的测试:
describe Secret do
describe "#last_five" do
let!(:secrets){create_list(:secret, 5)}
it "returns the last 5 secrets when last_five is called" do
expect(Secret.last_five.count).to eq(5)
end
end
end

这是secret_factory.rb:
FactoryGirl.define do 
factory :secret do
title "Title"
body "this is the body"
author
end

end

这是 user_factory.rb:
FactoryGirl.define do 
factory :user, aliases: [:author] do
name "Foobar"
email Faker::Internet.safe_email
password "password"
password_confirmation "password"
end
end

我正在生成一个随机的电子邮件地址,而用户工厂是我使用电子邮件的唯一地方,所以我很困惑我是如何收到电子邮件已经出错的。

谢谢您的帮助。

最佳答案

问题是您正在生成随机电子邮件 就一次 .
您需要执行 Faker::Internet.safe_email代码,块内 , 像这样:

FactoryGirl.define do 
factory :user, aliases: [:author] do
email { Faker::Internet.safe_email }
end
end

正如您定义的工厂, Faker::Internet.safe_email将仅在用户的工厂定义阶段执行。传递一个块,一个 proc 将被存储而不是一个字符串。这个过程包含 Faker::Internet.safe_email每次执行时都会执行 create_list(:secret, 5) ,每次都会给您一个新的假电子邮件。

另一种方法是使用 sequence 方法。

关于ruby-on-rails - 尝试使用 Rspec 和 FactoryGirl 创建列表时验证失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39307465/

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