ActiveRecord :: RecordInvalid:验证失败:电子邮件已被用于minitest

时间:2018-05-10 22:37:43

标签: ruby-on-rails factory-bot minitest database-cleaner

运行rake test时出现以下错误:

Error:
ShareTest#test_valid_setup:
ActiveRecord::RecordInvalid: Validation failed: Email has already been taken
test/models/share_test.rb:7:in `setup'

为什么呢?我真的不确定这意味着什么,因为即使我在设置中覆盖email参数,我也会收到错误。我的其他测试通过就好了。我的模型关联是这样写的:

- User has_many ItemsTradesShares

- Trade belongs_to UserShare

- Share belongs_to UserItem

- Item belongs_to User and has_many TradesShares

相关工厂是:

FactoryBot.define do
 factory :user, aliases: [:owner, :trade_requester, :trade_recipient, :share_owner] do
  email Faker::Internet.email
  firstname Faker::Name.first_name
  lastname Faker::Name.last_name
  username Faker::Pokemon.name
  website Faker::Internet.domain_name
 end

 factory :item do
  owner
  image { Rack::Test::UploadedFile.new(Rails.root.join('test', 'lilac.jpg'), 'image/jpeg') }
  title Faker::Book.title
  artist Faker::Book.author
  medium Faker::Book.genre
  year Faker::Number.number(4)
  price Faker::Number.between(1, 5)
  length Faker::Number.between(1, 2)
  height Faker::Number.between(1, 2)
  width Faker::Number.between(1, 2)
  agreement true
 end

 factory :share, aliases: [:wanted_share, :collateral_share] do
  user
  item
  amount { Item.price }
  active true
 end
end

然后我收到重复电子邮件错误的实际测试是:

require 'test_helper'
require 'support/database_cleaner'

class ShareTest < Minitest::Test
 def setup
  DatabaseCleaner.start
  @share = FactoryBot.create(:share)
 end

 def test_valid_setup
  assert_kind_of Integer, share.amount
 end

 def teardown
  DatabaseCleaner.clean
 end
end

0 个答案:

没有答案