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
被完全拒绝,测试将失败。
我正在使用带有 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
被完全拒绝,测试将失败。