javascript - 为断言设置自定义错误消息 (Node.js)
问题描述
我迷失在 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
抱歉,我知道我应该包括“我到目前为止所做的事情”——但我到目前为止所做的一切都没有任何影响。再一次,我迷失在节点文档中:)
解决方案
你不能不篡改 3 rd方库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 上 fork 库。实现一些观察者喜欢
onFail
或允许它可扩展并创建拉取请求。(不推荐)自己覆盖文件
fail
中的函数,node_modules\assert\assert.js
这样除了触发通常的东西外,它也可以执行您想要的操作。虽然很快,但这将永远导致依赖关系中断。
寻找其他断言库(如果有任何适合您的需要)