Jak*_*son 8 javascript testing unit-testing assert node.js
我正在学习使用mocha和assert模块在Node.js中进行测试.assert有这些类型的方法:
assert.equal();
assert.deepEqual();
assert.deepStrict();
assert.strict();
assert.ok(); // Is the value true?
Run Code Online (Sandbox Code Playgroud)
然后有一些对立面:
assert.notEqual();
assert.notDeepEqual();
assert.notDeepStrict();
assert.notStrict();
Run Code Online (Sandbox Code Playgroud)
但有一个缺失...为什么没有一种notOk()方法来测试结果值是否false存在?
这让我想到,对于一般的单元测试,我可能缺少一些基本的东西,也许我应该只测试值是否真实而且从不虚假...
现在,我一直在做这个来测试falsey语句:
assert.ok(!myValue);
Run Code Online (Sandbox Code Playgroud)
这是你应该怎么做的?同样,为什么不存在一种notOk()方法,因为所有其他方法都有一个not版本?
如果您查看文档,它会注意到这.ok(value, message)等效于assert.equal(!!value, true, message). 这似乎只是一个方便的功能。
应该注意的是,虽然调用了该函数ok(),但这并不意味着它期望true从您的代码中获得一个值。它正在等待一个您想要测试其真实性的陈述。因此,虽然您的使用!myValue是有效的,但我认为这样写更合适:
assert.ok(myValue === false);
Run Code Online (Sandbox Code Playgroud)
以上在语义上是有道理的,因为您仍在测试表达式的真实性,碰巧您期望它是错误的。包含一个notOk()函数意味着一些不明确的含义。Not OK意味着失败,因此notOk函数的失败可能看起来有点令人费解。
至于其他有not等价的方法,我觉得语言还是有意义的。说notEqual是暗示您正在专门测试不等式,而notOk实际上并没有意义。就我个人而言,我只是不将ok()所有一起使用,因为它本身就很模棱两可。
如果你真的觉得有需要,你也可以简单地编写自己的便利函数。
我觉得还值得一提的是,这是出处:
// 4. Pure assertion tests whether a value is truthy, as determined
// by !!guard.
// assert.ok(guard, message_opt);
// This statement is equivalent to assert.equal(true, !!guard,
// message_opt);. To test strictly for the value true, use
// assert.strictEqual(true, guard, message_opt);.
function ok(value, message) {
if (!value) fail(value, true, message, '==', assert.ok);
}
assert.ok = ok;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
911 次 |
| 最近记录: |