2015-12-02 58 views
0

林沿哈特尔的回报率教程以下和横跨ch.6下面的测试代码,这是不决策意识传来:这个测试为什么要通过?如此混乱

require 'test_helper' 

class UserTest < ActiveSupport::TestCase 

    def setup 
    @user = User.new(name: "Example User", email: "[email protected]") 
    end 

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

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

关注的最后一个测试“的名字应该存在”时,@user .name变量正在分配空格。那么不管这样做会使测试失败吗?

其次,什么是assert_not?断言就像“检查这是否属实”。 所以assert_not是“检查它是否为false”?

因此,上述测试正在执行以下操作?

  1. @name被制成空格

  2. 检查,如果@name是无效的?

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

如此混乱,以空格做....

回答

2

Object#present?在轨道定义为“不为空” - - 和String#blank?被定义为“空的或仅包含空白”。因此用所有空格填充的用户名不会出现。 assert_not与断言相反 - 它要求表达式为false。因此,假设您的User对象正在验证name属性的存在,那么使用空格填充它将使该名称不存在,因此使该对象无效,并且assert_not应该通过