为什么这个测试会通过?如此迷茫

时间:2015-12-02 17:17:39

标签: ruby-on-rails

我跟随Hartl的RoR教程,并在第6章中遇到了以下测试代码,这是没有意义的:

require 'test_helper'

class UserTest < ActiveSupport::TestCase

  def setup
    @user = User.new(name: "Example User", email: "user@example.com")
  end

  test "should be valid" do
    assert @user.valid?
  end

  test "name should be present" do
    @user.name = "     "
    assert_not @user.valid?
  end
end

关注最后一次测试&#34;名称应该存在&#34;,@ user.name变量被分配空格。所以,不管是什么,都不会让测试失败?

其次,什么是assert_not?断言就像&#34;检查这是否真实&#34;。 所以assert_not是&#34;检查它是否为假&#34;?

所以上面的测试正在做以下几点?

  1. @name为空格

  2. 检查@name是否无效?

  3. 是的,它无效,因为@name是在步骤1中为空格。

  4. 太困惑了......

1 个答案:

答案 0 :(得分:2)

Object#present?在rails中被定义为&#34;不是空白&#34; - 和String#blank?定义为&#34;为空或仅包含空格&#34;。因此,填写所有空格的用户名将不存在。 assert_not与assert相反 - 它要求表达式为false。因此,假设您的User对象正在验证name属性的存在,那么用空格填充它将使该名称不存在,从而使该对象无效,并且assert_not应该传递