我正在使用Mocha和Typescript编写单元测试,我对承诺很新,但我想我遇到了一些特殊的东西。我有一个像这样的单元测试
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()
返回另一个promise对象,但我实际上不想对该promise对象做任何其他事情,因为我在第一个上断言。现在我发现自己添加了这个:
.then(() => { return }, () => { return })
在最后一次发言之后但我不认为这是一个非常优雅的解决方案是否有更正确的方法来做到这一点?
答案 0 :(得分:1)
我不确定这是否是原因,但是你不应该在onRejected处理程序(assert.fail()
)中抛出异常而不用继续保证链。这将导致吞噬异常,并且done(err)
没有被调用。
相反,你可以依赖Mocha支持开箱即用的承诺并处理任何(意外)拒绝的事实:
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
被完全拒绝,则测试将失败。