2015-05-22 15 views
9

Piszę testy jednostkowe Javascript Mocha na kodzie, który zwraca obietnice. Używam biblioteki Chai as Promised. Oczekuję, że następujący minimalny test jednostkowy zakończy się niepowodzeniem.Jak zarejestrować nieudany test Mocha na obietnicy

var chai = require("chai"); 
var chaiAsPromised = require("chai-as-promised"); 
chai.use(chaiAsPromised); 
chai.should(); 

var Promise = require("bluebird"); 

describe('2+2', function() { 
    var four = Promise.resolve(2 + 2); 
    it('should equal 5', function() { 
     four.should.eventually.equal(5); 
    }) 
}); 

Po uruchomieniu tego testu wyświetlany jest komunikat potwierdzenia do konsoli, ale test nadal jest liczony jako przekazanie.

> mocha test/spec.js 


    2+2 
    ✓ should equal 5 
Unhandled rejection AssertionError: expected 4 to equal 5 


    1 passing (10ms) 

Jak napisać ten test tak, że nie udało twierdzenie powoduje próbę liczyć jako niepowodzenie?

Odpowiedz

10

Potrzebowałem zwrócić wynik asercji. Ten test kończy się niepowodzeniem, zgodnie z oczekiwaniami.

it('should equal 5', function() { 
     return four.should.eventually.equal(5); 
    }) 
+1

co jeśli potrzebujesz więcej niż jednego potwierdzenia ... – Jeremy

+2

Użyj 'Promise.all', aby połączyć wiele asercji. –

18

Dla ktokolwiek inny kłopoty z nieudanych twierdzeń nie upadających testów jednostkowych z obietnicami, dowiedziałem się, że nie można ich przekazać done do funkcji. Zamiast tego, po prostu wrócić obietnicę:

it('should handle promises', function(/*no done here*/) { 

    return promiseFunction().then(function(data) { 
     // Add your assertions here 
    }); 

    // No need to catch anything in the latest version of Mocha; 
    // Mocha knows how to handle promises and will see it rejected on failure 

}); 

This article wskazał mnie we właściwym kierunku. Powodzenia!

+1

Najlepsza odpowiedź we wszechświecie. Cóż, OK, widzisz, że ostatnio zmagam się z moją ignorancją JavaScriptu - ale z drugiej strony, jestem wdzięczny za małe przysługi. :) –