我正在阅读迈克尔·哈特尔的导轨教程,并且在6.2.2中,UserTest包含了一个名称应该存在的测试'。测试包括代码
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.
是否存在一个测试失败而另一个测试失败的情况,或者这些测试是否可以互换? '断言。无效?'对我来说似乎更自然。
BTW,测试失败,因为测试是在编写验证电子邮件存在的代码之前编写的。答案 0 :(得分:0)
是的,它们是等价的。
.valid?并且无效?会给你真或假,而assert_not期望为零或假,断言会期望一个非零对象或真。
假设@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有效,你可以做同样的推理。