ruby-on-rails - Rails教程对Rspec的误解

标签 ruby-on-rails ruby rspec

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/

相关文章:

ruby - [*a..b] 在 Ruby 中的语法是什么意思?

ruby - 在 Ruby (1.9.3) 中,为什么 nil 响应比较运算符 `<=>` ?

Ruby/RSpec - 预计不包括任何

ruby-on-rails - 销毁路径在 Ruby on Rails 中不起作用

arrays - 从序列创建子数组

ruby-on-rails - 如何停用特定版本的 gem?

rspec - Capybara 2.1 错误未初始化常量 Rails (NameError)

ruby-on-rails - 如何使用 RSpec 检查 JSON 响应?

ruby-on-rails - 弹性负载均衡器的延迟问题

ruby-on-rails - CartsController 中的 NoMethodError#destroy - 使用 Rails 4 进行敏捷 Web 开发