Mocha 测试:没有错误回调的警告 Promise

Mocha Test: Warning Promise with no error callback

我正在使用带有 Typescript 的 Mocha 编写单元测试,我对 promises 很陌生,但我认为我 运行 遇到了一些奇怪的事情。我有这样的单元测试

test("Hello world command exists", function(done) {
    let cmds = vscode.commands.getCommands(true)
    cmds.then(
        ids => {
            let containsCmd = ids.indexOf("extension.sayHello")
            assert.notEqual(containsCmd, -1)
            done()
        },
        err => {
            assert.fail()
            done(err)
        }
    )

测试运行良好,但我收到了一条困扰我的警告。 WARNING: Promise with no error callback。我知道这是因为 cmds.then() returns 另一个 promise 对象,但实际上我不想对该 promise 对象执行任何其他操作,因为我在第一个对象上断言。现在我发现自己添加了这个:

.then(() => { return }, () => { return })

在最后一个陈述之后,但我认为这不是一个非常优雅的解决方案,有没有更正确的方法来做到这一点?

我不确定这是否是原因,但你不应该在 onRejected 处理程序 (assert.fail()) 中抛出异常 没有 继续承诺链。这将导致异常被吞噬,并且 done(err) 不被调用。

相反,您可以相信 Mocha 开箱即用地支持 promise 并将处理任何(意外的)拒绝:

test("Hello world command exists", function() {
  let cmds = vscode.commands.getCommands(true)
  return cmds.then(ids => {
    let containsCmd = ids.indexOf("extension.sayHello")
    assert.notEqual(containsCmd, -1)
  })
})

如果断言失败,或者如果 cmds 被完全拒绝,测试将失败。