'assert_not user.valid?' 对比 'assert user.invalid?'
'assert_not user.valid?' vs. 'assert user.invalid?'
我正在阅读 Michael Hartl 的 rails 教程,并且在 6.2.2 UserTest 中包含针对 'name should be present' 的测试。测试包括代码
test 'email should be present' do
@user.email = " "
assert_not user.valid?
end
当测试失败时,输出如下:
FAIL["test_name_should_be_present", UserTest, 0.10366088798036799]
test_name_should_be_present#UserTest (0.10s)
Expected true to be nil or false
如果我将断言更改为
test 'email should be present' do
@user.email = " "
assert user.invalid?
end
失败的测试输出是
FAIL["test_name_should_be_present", UserTest, 0.11991263600066304]
test_name_should_be_present#UserTest (0.12s)
Expected false to be truthy.
是否存在一种测试会失败而另一种测试不会失败的情况,或者这些情况可以互换? 'assert .invalid?' 对我来说更自然。
顺便说一句,测试失败了,因为测试是在编写验证电子邮件是否存在的代码之前编写的。
是的,它们是等价的。
.valid? and invalid? will give you true or false, while assert_not 期望 nil 或 false,assert 期望非 nil 对象或 true。
假设@user无效,那么你可以:
assert_not @user.valid?
#valid will give you false, so 'assert_not false' is true, and the test passes.
另一方面:
assert @user.invalid?
#invalid will give you true, so 'assert true' is true, and the test passes.
如果我们改变假设并且@user 是有效的,你可以做同样的推理。
我正在阅读 Michael Hartl 的 rails 教程,并且在 6.2.2 UserTest 中包含针对 'name should be present' 的测试。测试包括代码
test 'email should be present' do
@user.email = " "
assert_not user.valid?
end
当测试失败时,输出如下:
FAIL["test_name_should_be_present", UserTest, 0.10366088798036799]
test_name_should_be_present#UserTest (0.10s)
Expected true to be nil or false
如果我将断言更改为
test 'email should be present' do
@user.email = " "
assert user.invalid?
end
失败的测试输出是
FAIL["test_name_should_be_present", UserTest, 0.11991263600066304]
test_name_should_be_present#UserTest (0.12s)
Expected false to be truthy.
是否存在一种测试会失败而另一种测试不会失败的情况,或者这些情况可以互换? 'assert .invalid?' 对我来说更自然。
顺便说一句,测试失败了,因为测试是在编写验证电子邮件是否存在的代码之前编写的。
是的,它们是等价的。
.valid? and invalid? will give you true or false, while assert_not 期望 nil 或 false,assert 期望非 nil 对象或 true。
假设@user无效,那么你可以:
assert_not @user.valid?
#valid will give you false, so 'assert_not false' is true, and the test passes.
另一方面:
assert @user.invalid?
#invalid will give you true, so 'assert true' is true, and the test passes.
如果我们改变假设并且@user 是有效的,你可以做同样的推理。