首页 > 解决方案 > 为断言设置自定义错误消息 (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

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

标签: javascriptnode.jserror-handlingassertwebdriver-io

解决方案


你不能不篡改 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
  });
}

因此,您有三个选择:

  1. (推荐) 在 github 上 fork 库。实现一些观察者喜欢onFail或允许它可扩展并创建拉取请求。

  2. (不推荐)自己覆盖文件fail中的函数,node_modules\assert\assert.js这样除了触发通常的东西外,它也可以执行您想要的操作。

    虽然很快,但这将永远导致依赖关系中断。

  3. 寻找其他断言库(如果有任何适合您的需要)


推荐阅读