为断言(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

我很抱歉,我知道我应该包括"到目前为止我所做的事情" - 但到目前为止我所做的一切都没有影响。 再一次,我迷失在节点文档中:)

你不能,而不篡改第三方库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
});
}

因此,您有三种选择:

  1. (推荐(在 github 上分叉库。实现一些观察程序(如onFail(或允许其可扩展并创建拉取请求。

  2. (不推荐(自己覆盖node_modulesassertassert.js文件中的fail函数,这样,除了触发通常的东西之外,它还可以做你想要的。

    虽然很快,但这会导致永远中断的依赖项。

  3. 寻找其他断言库(如果有适合您需求的(

我的答案

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', '##');
});
});

参考

相关内容

  • 没有找到相关文章

最新更新