在Rails中使用FactoryBot和Rspec的`raise_record_invalid`
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Rails中使用FactoryBot和Rspec的`raise_record_invalid`相关的知识,希望对你有一定的参考价值。
我正在使用FactoryBot
为我的Rspec测试创建假数据。我的工厂用户如下:
FactoryBot.define do
factory :user do
sequence(:name) { |n| "User#{n}" }
sequence(:email) { |n| "user#{n}@email.com" }
end
end
创建用户在我的User
模型中自动创建客户端作为后续操作:
def initialize_client
self.client = self.build_client
self.client.setup_stripe
self.save
end
我有一个客户工厂:
FactoryBot.define do
factory :client do
user
end
end
我创建了一个Rspec文件来测试client
是否在创建User时正确构建:
describe User, type: :model do
user = FactoryBot.create(:user)
end
但这会引发错误:
raise_record_invalid': Validation failed: Email has already been taken (ActiveRecord::RecordInvalid)
即使运行FactoryBot.create(:user)
创建客户端和用户已被接受。我不确定在这一点上我需要改变什么
答案
为了我的辩护,我对FactoryBot不太熟悉。
您在create
中使用user = FactoryBot.create(:user)
,它将在您的数据库中创建记录,因此当您尝试创建相同的记录时,您将收到错误。
请执行下列操作
- 杀死你的服务器,所以你不会遇到有人正在使用你的数据库
- 运行
rails db:setup
- 运行
rails db:setup RAILS_ENV=test
注意:全部
rails db:setup
版本将帮助您重置数据库并运行种子文件(如果有)。
希望我的解释有助于您开始研究和学习更多;)
以上是关于在Rails中使用FactoryBot和Rspec的`raise_record_invalid`的主要内容,如果未能解决你的问题,请参考以下文章
失败/错误:使用Rspec发布#create testing
在 Rails 中使用 RSpec 和 Capybara 时未定义的方法“访问”