我跟随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;?
所以上面的测试正在做以下几点?
@name为空格
检查@name是否无效?
是的,它无效,因为@name是在步骤1中为空格。
太困惑了......
答案 0 :(得分:2)
Object#present?在rails中被定义为&#34;不是空白&#34; - 和String#blank?定义为&#34;为空或仅包含空格&#34;。因此,填写所有空格的用户名将不存在。 assert_not与assert相反 - 它要求表达式为false。因此,假设您的User对象正在验证name属性的存在,那么用空格填充它将使该名称不存在,从而使该对象无效,并且assert_not应该传递