我正在做Hartl的Rails 4教程第6章的练习.第一个练习测试确保用户邮箱地址的大小写正确:

require 'spec_helper'

describe User do
  .
  .
  .
  describe "email address with mixed case" do
    let(:mixed_case_email) { "Foo@ExAMPle.CoM" }

    it "should be saved as all lower-case" do
      @user.email = mixed_case_email
      @user.save
      expect(@user.reload.email).to eq mixed_case_email.downcase
    end
  end
  .
  .
  .
end

我不明白的是为什么这里需要"重新加载"方法.一旦@user.email被设置为mixed_case_emailsaved的内容,@user.reload.email@user.email不是一回事吗?我拿出重新加载的方法只是为了try 一下,它似乎没有改变任何测试.

我错过了什么?

推荐答案

是的,在这个例子中,@user.reload.email@user.email是一样的.但是最好用@user.reload.email而不是@user.email来判断数据库中到底保存了什么我的意思是你不知道如果你或某人在保存后添加了一些代码改变了它的值,那么它将不会对你的测试产生影响.

EDIT:

Ruby-on-rails相关问答推荐

使用超级用户角色和未知密码创建与POSTRES用户的连接

在控制器操作中适当使用ActiveModel Dirty

Gemfile需要较新版本的依赖项

会话控制器中的某种问题

如何使用继承类 (STI) 获取 Ruby on Rails 类中基类的实例

Ruby on Rails form_with 不显示错误,卡在服务器端

Rails 100% 新手问题 - send() 方法

Rails:如何小写非英文字符串?

上传图片 Ruby on Rails

Rails 3:如何正确显示textarea中的文本?

对于 Visual Studio 用户来说,最好的 Ruby on Rails 环境是什么?

如何在 rspec 中运行单个测试?

使 rails 控制台输出更漂亮一点

嵌套模型和父验证

使用 ruby​​ on rails 活动记录插入多条记录

如何从 rails 控制器操作发出 404 响应?

如何在每个操作的基础上禁用 Ruby on Rails 的日志(log)记录?

Rails:如何将日期时间字符串解析为特定时区

ArgumentError:ApplicationController 的副本已从模块树中删除,但仍处于活动状态

如何为 Rails 控制器添加延迟以进行测试?