我在 Node 文档中迷失了方向,我很难弄清楚如何为所有断言语句创建自定义(或修改现有(错误处理,而不必在每个断言中包含单独的消息。
const assert = require('assert');
describe('Test 1', function(){
describe('Checks State', function(){
it('will fail', function(){
assert.strictEqual(true, false);
});
});
});
正如预期的那样,前面的代码只会生成类似以下内容:
1) "Test 1 Checks State will fail"
true === false
我正在使用 WebDriverIO 运行,我的目标是在错误消息中包含browser.sessionId
,而无需在每个测试中手动填写第三个(消息(参数。
assert.strictEqual(true, false, browser.sessionId);
如果我能生成如下错误消息,那将是理想的:
1) "Test 1 Checks State will fail"
abc012-efg345-hij678-klm901
true !== false
我很抱歉,我知道我应该包括"到目前为止我所做的事情" - 但到目前为止我所做的一切都没有影响。 再一次,我迷失在节点文档中:)
你不能,而不篡改第三方库assert
在后台,使用fail
函数,该函数在assert
上下文中是私有的,您无法告诉assert
使用自定义fail
函数。
这是幕后使用的功能:
function fail(actual, expected, message, operator, stackStartFunction) {
throw new assert.AssertionError({
message: message,
actual: actual,
expected: expected,
operator: operator,
stackStartFunction: stackStartFunction
});
}
因此,您有三种选择:
(推荐(在 github 上分叉库。实现一些观察程序(如
onFail
(或允许其可扩展并创建拉取请求。(不推荐(自己覆盖
node_modulesassertassert.js
文件中的fail
函数,这样,除了触发通常的东西之外,它还可以做你想要的。虽然很快,但这会导致永远中断的依赖项。
寻找其他断言库(如果有适合您需求的(
我的答案
const assert = require('assert');
describe('Set Custom Error Message for Assert (Node.js)', () => {
it('Message Assert', () => {
assert.fail(21, 42, 'This is a message custom', '##');
});
});
参考