2016-09-22 4 views
0

zu testen, Fehler (alle diese Beispiel-Code ist Coffeescript)Versuch und verspricht mit Jasmin

ich ein allgemeines Versprechen wie so haben:

describe "foo",() -> 
    it "foo",() -> 

    p = new Promise (r) -> r(1) 
    p.then (x) -> 
     console.log("promise run") 
     expect(x).toEqual(2) 

Dieser scheitern erwartet wird, aber es doesn‘ t. Die Erwartung wird nie getroffen und auch nichts wird protokolliert.

Von the jasmine team's blog post on the topic es scheint, dass ich so etwas schreiben kann:

p.then (x) -> 
    expect(x).toEqual(2) 
    done() 

aber es hat die gleiche Wirkung.

Der Blog-Eintrag empfiehlt die mock-promises Bibliothek, die wir benutzten schreiben:

p.then (x) -> 
    console.log x 
    expect(x).toEqual(2) 
MockPromises.executeForPromise(p); 

aber es hat den gleichen Effekt (die Erwartung nie getroffen)

+0

Wenn Ihr Test Runner immer noch keine Versprechen als Rückgabewerte im Jahr 2016 akzeptiert, könnte es Zeit sein, es zu ändern (oder einfach zu aktualisieren?) – Bergi

+0

Protip: 'p = Promise.resolve 1' – Bergi

+0

@bergi, hast du gesehen Ich habe bereits eine Antwort für mich selbst geschrieben? Es ist möglich, dass ich gerade etwas sehr geringes vermisste. Wie auch immer, hast du einen Vorschlag für eine bessere Testbibliothek als Jasmine? –

Antwort

0

Instant-Befriedigung:

Es ist eine einfache Lösung:

alles, was ich tun musste, war done als Argument an die it Funktion übergeben:

describe "foo",() -> 
    it "foo", (done) -> 
    p = new Promise (r) -> r(1) 
    p.then (x) -> 
     console.log x 
     expect(x).toEqual(2) 
     done() 

Dank einer Anregung in den Kommentaren sollte ich auch

.catch(done) 

am Ende hinzufügen, so dass Fälle versagt einfach nicht Timeout.