javascript - Mocha / Node:如何使用 assert.rejects()?
问题描述
我尝试遵循文档以使用 assert.rejects 测试错误消息(我确实有高于 v10 的节点)。
但它总是会过去,即使是一个荒谬的信息。我究竟做错了什么?
it("should fail but it's not",
async ()=> {
let itemId = 'not an id'
assert.rejects(
await ListRepo.checkById(itemId),
{message: 'abracadabra'}
)
}
)
更新:似乎如果我返回 assert.rejects,它会起作用。但我仍然不知道原因。
解决方案
在我写这篇文章时,上面/以前写的所有内容都是正确的,但其中大部分都是不必要的复杂。你必须返回一个promise是正确的,这样mocha本身就有东西等待,否则它会立即返回(在你的promise可以解决或拒绝之前)。缺少的部分是手动等待一个承诺很少是你真正想要在这里做的。
@caub 在评论中暗示了这种最简单的模式——等待assert.rejects
. 具体来说:
it("should fail but it's not",
async ()=> {
let itemId = 'not an id'
await assert.rejects(
ListRepo.checkById(itemId),
{message: 'abracadabra'}
)
}
)
这里有三个关键点:
- 测试函数本身必须是
async
. await
assert.rejects
(异步)测试函数内部的调用。这会自动使测试函数 returnPromise<void>
,这正是您想要的。这将重要的部分放在了 assert 调用的位置,与手动返回/处理 promise 相比,更容易在其他地方复制/粘贴调用,并且更容易在一个测试中断言多个拒绝。- 不要将
await
您传递给rejects
呼叫的内容。你应该传入一个承诺——而不是一个await
ed 值。
推荐阅读
- python-3.x - 在 TensorFlow 中训练“BoostedTreesClassifier”?
- android - Android 从设备内部存储器显示 webview 内容
- r - get an element from a subset of a matrix in Rarmadillo
- python - 在 biopython 中使用 pairwise2 匹配的残基索引
- spring-boot - spring基本安全中没有为id“null”映射的PasswordEncoder
- sql - varchar 范围的 order 子句
- python - python IndexError:列表索引超出范围-beautifulsoup
- powershell - Simple PowerShell Script, to obtain PATHS from a CSV, confirm that those exist and write another CSV with the true results
- bash - 下载直播流时,如何使 youtube-dl 或 streamlink 在一段时间后停止
- rest - REST api 命名约定技术或功能标识符