【发布时间】:2013-03-12 16:04:50
【问题描述】:
我有一个关于this test from the Michael Hartl tutorial 的问题:
型号:
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 只是用一个 new 实例化,而不是一个 create。
所以这就是我认为会发生的事情:
-
@user = User.new(仅在记忆中) - ...
-
user_with_same_email = @user.dup我们内存中有两个用户 - ...
-
user_with_same_email.save我们将第一个用户插入到数据库中,所以它应该是有效的,但测试it { should_not be_valid }通过了。
我做错了什么?
【问题讨论】:
标签: validation ruby-on-rails-3.2