代码之家  ›  专栏  ›  技术社区  ›  Alexander Mills

assert.throws=>缺少预期的异常

  •  0
  • Alexander Mills  · 技术社区  · 6 年前

    我正在使用这段代码:

           assert.throws(async () => {
                patientSubscriber = await PatientSubscriber.create({
                    isSubscribed: true,
                    patient: patient._id,
                    subscriber: user._id
                });
            },{
                 message: /foo/
            });
    

    当我运行它时,我得到:

    AssertionError[ERR\u ASSERTION]:缺少预期的异常。

    断言API是: https://nodejs.org/api/assert.html#assert_assert_throws_fn_error_message

    也许我在讨论这个问题? https://github.com/nodejs/node-v0.x-archive/issues/8368

    1 回复  |  直到 6 年前
        1
  •  8
  •   Estus Flask    6 年前

    该错误意味着在预期的时间内没有异常。 async

    因为断言应该是同步的,所以用这种方式断言承诺是不可能的;整个调用堆栈应该是基于承诺的。

    正如评论中提到的, assert.rejects 出现在节点10中,导致断言失败时拒绝承诺。

    如果承诺由调用方处理(例如在大多数测试框架中),则需要从当前函数返回被拒绝的承诺:

    it('...', async () {
      await assert.rejects((async () => {})()); // current function returns rejected promise
    });
    

    UnhandledPromiseRejectionWarning 控制台输出,不在异常中。 unhandledRejection

    process.on('unhandledRejection', err => {
      console.error(err);
      process.exit(1);
    });
    
    ...
    
    assert.rejects((async () => {})());
    
    推荐文章