设置声明的自定义错误消息(Node.js)

时间:2018-07-02 13:41:50

标签: javascript node.js error-handling assert webdriver-io

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

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无需,而不必在每次测试中手动填写第三个(消息)参数。< / p>

assert.strictEqual(true, false, browser.sessionId);

如果能够生成如下错误消息,那将是理想的选择:

1) "Test 1 Checks State will fail"
abc012-efg345-hij678-klm901
true !== false

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

2 个答案:

答案 0 :(得分:2)

您不能不篡改3 rd 方lib 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. (推荐) Fork the lib on github。实现某些观察者,例如onFail或允许其可扩展并创建拉取请求。

  2. (不推荐)自己覆盖fail文件中的node_modules\assert\assert.js函数,以便除了触发常规操作外,它还能满足您的需求

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

  3. 寻找其他断言库(如果有满足您需要的断言库)

答案 1 :(得分:0)

我的答案

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

Reference