gpt4 book ai didi

ruby-on-rails - FactoryGirl 和 Rspec

转载 作者:行者123 更新时间:2023-12-04 05:41:50 26 4
gpt4 key购买 nike

我对这个 TDD 业务非常友好,所以任何帮助都会很棒!

所以,我有一个工厂有以下内容:

FactoryGirl.define do

factory :account do
email "example@example.com"
url "teststore"
end

end

和一个 Rspec 测试:
  it "fails validation without unique email" do
account1 = FactoryGirl.create(:account)
account2 = FactoryGirl.create(:account)
account2.should have(1).error_on(:email)
end

我收到以下消息失败:
  1) Account fails validation without unique email
Failure/Error: account2 = FactoryGirl.create(:account)
ActiveRecord::RecordInvalid:
Validation failed: Email taken, please choose another, Url taken, please choose another
# ./spec/models/account_spec.rb:11:in `block (2 levels) in <top (required)>'

这是创建新工厂的正确方法吗?任何想法我在这里做错了什么(我毫不怀疑我做的事情完全不正确!)

编辑:我正在考虑不要在第二个帐户上使用“创建”,我可能想使用 .build 然后使用 .save 代替?

最佳答案

保存自己的数据库交互并使用 build这种情况的方法。

it "fails validation without unique email" do
account1 = create(:account)
account2 = build(:account)
account2.should_not be_valid
account2.should have(1).error_on(:email)
end

您无需尝试为 valid? 创建帐户返回假。即使它只是内置在内存中,您也可以访问帐户上的错误对象。这将减少数据库交互,从而使您的测试更快。

您是否考虑过在工厂中使用序列?我不知道您对 RSpec/FactoryGirl 的体验有多远,但您会发现以下内容非常有用。

工厂.rb
factory :account do
sequence(:email) { |n| "user#{n}@example.com" }
url "teststore"
end

每次打电话 buildcreate在帐户工厂,您将收到独特的电子邮件。

请记住,您始终可以使用选项哈希为工厂的属性指定值。因此,当在帐户上测试您的唯一性验证时,您将执行以下操作。
it "fails validation without unique email" do
account1 = create(:account, :email => "foo@bar.com")
account2 = build(:account, :email => "foo@bar.com")
account2.should_not be_valid
account2.should have(1).error_on(:email)
end

关于ruby-on-rails - FactoryGirl 和 Rspec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8439275/

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