Michael Hartl 的 rails 教程的 list 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(...) 会有一个保存,但不是新方法。谢谢!
最佳答案
您不会错过隐式保存。
user_with_same_email
确实保存正确(我个人总是使用 save! 来确保它不会无声地失败)
规范说明的是主题(即 @user
)无法保存,因为数据库中存在具有相同电子邮件的行。
关于ruby-on-rails - Rails教程对Rspec的误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14034354/