运行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 Items
,Trades
和Shares
- Trade
belongs_to User
和Share
- Share
belongs_to User
和Item
- Item
belongs_to User
and has_many Trades
和Shares
相关工厂是:
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