这是检查电子邮件唯一性的 rspec 测试(来自http://ruby.railstutorial.org/chapters/modeling-users.html#code-validates_uniqueness_of_email_test)
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.save
end
it { should_not be_valid }
end
end
正如作者提到的,我补充说
class User < ActiveRecord::Base
.
.
.
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX },
uniqueness: true
end
到我的用户模型并且测试通过。
但是@user 还没有保存到数据库中(我在代码的任何地方都找不到@user.save 语句。)所以,user_with_same_email 已经是唯一的,因为数据库中没有其他用户使用相同的电子邮件。那么它是如何工作的呢?
我在控制台中创建了类似的东西。user_with_same_email.valid?返回 false (错误“已被采取”),但 user_with_same_email.save 仍然有效。为什么?