2016-07-13 86 views
0

我正在用Typescript寫Mocha的單元測試,我對承諾很陌生,但我認爲我碰到了一些奇怪的東西。我有一個像這樣的單元測試摩卡測試:警告承諾沒有錯誤回調

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()返回另一個承諾對象,但我實際上不希望對該承諾對象做任何其他事情,因爲我在第一個承諾對象上聲明。現在我發現自己添加此:

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

最後陳述後,但我不認爲這是一個非常優雅的解決方案是有做這樣的比較正確的做法?

回答

1

我不確定這是否是原因,但是您不應該在onRejected處理程序中拋出異常(assert.fail()而不要繼續承諾鏈。這將導致異常被吞噬,並且done(err)未被調用。

相反,你可以依靠的事實,摩卡支持的承諾開箱,並處理任何(意外)拒絕:如果斷言失敗

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完全拒絕,測試將失敗。