模型:
class User < ActiveRecord::Base
.
.
.
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX },
uniqueness: true
end
测试:
require 'spec_helper'
describe User do
before do
@user = User.new(name: "Example User", email: "user@example.com")
end
.
.
.
describe "when email address is already taken" do
before do
user_with_same_email = @user.dup
user_with_same_email.email = @user.email.upcase
user_with_same_email.save
end
it { should_not be_valid }
end
end
我对电子邮件唯一性验证器的理解是它不能在数据库中添加两次。但是在这个测试中,用户只是用一个新的实例化,而不是一个创建。
所以这就是我认为会发生的事情:
@user = User.new
(只是在记忆中)- ...
user_with_same_email = @user.dup
我们在内存中有两个用户- ...
user_with_same_email.save
我们在数据库中插入第一个用户,所以它应该是有效的,但测试it { should_not be_valid }
通过了。
我怎么了?