为断言设置自定义错误消息 (Node.js)

Dou*_*oug 7 javascript error-handling assert node.js webdriver-io

我迷失在 Node 文档中,并且很难弄清楚如何为所有断言语句创建自定义(或修改现有)错误处理,而不必在每个断言中包含单独的消息。

const assert = require('assert');

describe('Test 1', function(){
  describe('Checks State', function(){
    it('will fail', function(){
        assert.strictEqual(true, false);
    });
  });
});
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,之前的代码只会生成类似以下内容的内容:

1) "Test 1 Checks State will fail"
true === false
Run Code Online (Sandbox Code Playgroud)

browser.sessionId我正在使用 WebDriverIO 运行,我的目标是在错误消息中包含,而不必在每个测试中手动填写第三个(消息)参数。

assert.strictEqual(true, false, browser.sessionId);
Run Code Online (Sandbox Code Playgroud)

如果我能生成如下错误消息,那就太理想了:

1) "Test 1 Checks State will fail"
abc012-efg345-hij678-klm901
true !== false
Run Code Online (Sandbox Code Playgroud)

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

Ade*_*lin 4

你不能,除非篡改第 3assert

在幕后,使用一个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
  });
}
Run Code Online (Sandbox Code Playgroud)

因此,您有三个选择:

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

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

    虽然速度很快,但这将永远导致依赖关系破裂。

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