0

我试图了解清单 6.18(rails 3.2)中的唯一性约束测试。

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

“这里的方法是创建一个与@user 具有相同电子邮件地址的用户,我们使用@user.dup 完成此操作,它会创建一个具有相同属性的重复用户。由于我们随后保存了该用户,因此原始@user 有一个数据库中已经存在的电子邮件地址,因此应该是无效的。”

我不清楚的部分是第一个用户在哪里/何时保存到数据库?即没有调用user.save。汽车魔术在哪里?

谢谢,

K A

4

1 回答 1

0

第一个用户永远不会被保存。测试设置初始化(但不保存)用户,然后复制它并保存副本。然后它会尝试验证原始(未保存的)用户。因为副本具有相同的电子邮件地址,所以valid?返回false.

于 2013-06-18T05:33:58.227 回答