node.js - assert.throws 说 => 缺少预期的异常

标签 node.js asynchronous assert

我正在使用这段代码:

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

当我运行它时,我得到了这个:

AssertionError [ERR_ASSERTION]: Missing expected exception.

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

也许我遇到了这个问题? https://github.com/nodejs/node-v0.x-archive/issues/8368

有人知道那个错误是怎么回事吗?

最佳答案

错误意味着没有异常,而这是预期的。 async 函数是 promise 的语法糖。他们从不抛出异常,但可能会返回被拒绝的 promise 。

由于断言应该是同步的,因此不可能以这种方式断言 promise ;整个调用栈应该是基于 promise 的。

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

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

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

如果断言 promise 未被处理(例如在生产中),它们会导致 UnhandledPromiseRejectionWarning 控制台输出,而不是异常。 unhandledRejection 处理程序可以设置为处理异步错误:

process.on('unhandledRejection', err => {
  console.error(err);
  process.exit(1);
});

...

assert.rejects((async () => {})());

关于node.js - assert.throws 说 => 缺少预期的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52449922/

相关文章:

javascript - 使用 node.js asocket.io 向单个特定客户端发送/发出消息

node.js - 运行 node.js 代码只显示一个 Node 标识符

javascript - JS从字符串中读取对象

javascript - 我正在阅读关于 promise 的 MDN 文档并想出了一个我无法理解的例子。任何人都可以向我解释流程

c# - TDD - 为什么这个 Assert.AreSame 通过?

javascript - 有没有办法将数组名称转换为字符串?

java - Android 异步任务 ArrayList 操作导致 onDraw 中 IndexOutOfBounds

java - Spring 任务异步和延迟

testing - 我如何断言接受 JUnit 中的多个可能值之一

c++ - 如何正确重写 ASSERT 代码以在 msvc 中传递/分析?