在Rails中使用FactoryBot和Rspec的`raise_record_invalid`

问题描述 投票:1回答:1

我正在使用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)创建客户端和用户已被接受。我不确定在这一点上我需要改变什么

ruby-on-rails ruby-on-rails-4 rspec factory-bot rspec-rails
1个回答
1
投票

为了我的辩护,我对FactoryBot不太熟悉。

您在create中使用user = FactoryBot.create(:user),它将在您的数据库中创建记录,因此当您尝试创建相同的记录时,您将收到错误。

  1. Read this for getting more info
  2. check this too

请执行下列操作

  1. 杀死你的服务器,所以你不会遇到有人正在使用你的数据库
  2. 运行rails db:setup
  3. 运行rails db:setup RAILS_ENV=test

注意:全部

rails db:setup

版本将帮助您重置数据库并运行种子文件(如果有)。

希望我的解释有助于您开始研究和学习更多;)

© www.soinside.com 2019 - 2024. All rights reserved.