Rails教程Rspec误解

时间:2012-12-25 22:11:44

标签: ruby-on-rails ruby rspec

Michael Hartl的rails教程6.20列出了以下代码:

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

我无法理解这个概念,因为@ user.dup返回完全相同的对象的表示,该对象被复制到user_with_same电子邮件,但@user从未保存到文件中的任何位置的数据库中。因此,user_with_same_email.save测试每次都应该有效。但是,测试通过了。有人请解释一下...... @ user = User.new(...)是否存在隐式数据库?我知道如果是User.create(...)会有一个保存,但不是新方法。谢谢!

1 个答案:

答案 0 :(得分:4)

您没有错过隐式保存。

user_with_same_email确实保存正确(我个人总是会使用save!以确保它没有以静默方式失败)

规范的内容是主题(即@user)无法保存,因为数据库中存在同一封电子邮件的行。