2016-07-13 9 views
0

Ich schreibe einen Komponententest mit Mocha mit Typescript, ich bin ziemlich neu zu versprechen, aber ich denke, ich habe in etwas eigenartig geraten. Ich habe ein Gerät zu testen, wie soMokka-Test: Warnung Versprechen ohne Fehler Rückruf

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) 
     } 
    ) 

Der Test läuft gut, aber ich bin immer eine Warnung, die mich nervt. WARNING: Promise with no error callback. Ich verstehe, dass dies ist, weil cmds.then() ein anderes Versprechen-Objekt zurückgibt, aber ich möchte eigentlich nichts anderes mit diesem Versprechen-Objekt tun, weil ich auf dem ersten behaupte. Im Moment habe ich gefunden Zugabe ich dies:

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

Nach der letzten Aussage, aber ich glaube nicht, es ist eine sehr elegante Lösung ist es ein richtiger Weg, dies zu tun?

Antwort

1

Ich bin mir nicht sicher, ob dies die Ursache ist, aber Sie sollten nicht Ausnahmen in einem onRejected Handler geworfen (assert.fail()) ohne das Versprechen Kette fortsetzt. Dies führt dazu, dass Ausnahmen verschluckt werden und done(err) nicht aufgerufen wird.

Stattdessen können Sie sich darauf verlassen, dass Mocha Versprechen aus der Box unterstützt und werden alle (unerwarteten) Ablehnungen Griff:

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) 
    }) 
}) 

Wenn die Behauptung fehlschlägt, oder wenn cmds vollständig abgelehnt, den Test wird versagen.

Verwandte Themen