Joã*_*ero 6 javascript mocha.js promise node-assert
我尝试按照文档进行操作,以便使用assert.rejects(我确实有v10以上的Node)来测试错误消息。
但它总是会过去,即使有一个荒谬的信息。我究竟做错了什么?
it("should fail but it's not",
async ()=> {
let itemId = 'not an id'
assert.rejects(
await ListRepo.checkById(itemId),
{message: 'abracadabra'}
)
}
)
Run Code Online (Sandbox Code Playgroud)
更新:看来如果我返回assert.rejects,它就会起作用。但我还是不知道原因。
Gra*_*ner 11
当我写这篇文章时,上面/之前写的所有内容都是正确的,但其中大部分是不必要的复杂。您必须返回一个 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'}
)
}
)
Run Code Online (Sandbox Code Playgroud)
这里有三个关键点:
async.awaitassert.rejects(异步)测试函数内的调用。这会自动使测试函数返回Promise<void>,这正是您想要的。这将重要的部分放在断言调用的位置,与手动返回/处理承诺相比,可以更轻松地将调用复制/粘贴到其他地方,并更容易在一次测试中断言多个拒绝。await您要传递给rejects通话的内容。您应该传递一个承诺,而不是一个awaited 值。