Ich versuche Unit-Test eine Controller-Methode mit Mocha + Chai + Sinon, aber ich habe Mühe zu verstehen, wie die Assertion mit diesen asynchronen Methoden funktioniert. Hier ist mein Test:Async-Test ruft nie fertig(), wenn Assertion fehlschlägt
it('should fetch all registered books and send them as json', (done) => {
res.json = sandbox.spy();
const books = [];
BookMock.expects('find').withArgs()
.resolves(books);
booksController.index(req, res,() => {
res.json.should.have.been.calledWith(200, { data: books });
done();
});
});
Das Problem bei diesem Test ist, dass, wenn ich die Behauptung ändere ein 300
statt 200
Parameter, beispielsweise zu erwarten, wird mein Test stoppen (gescheitert) und nie done()
nennen, was zu Ein generischer Fehler, der nichts weiter sagt als einen 'Test fehlgeschlagen, weil done nie aufgerufen wurde', was nichts über den Grund aussagt, dass der Test überhaupt fehlgeschlagen ist.
Wenn ich den Test so halte und meine Controller-Methode alles gut macht, ist der Test bestanden und alles ist in Ordnung, aber wenn der Controller etwas falsch macht, schlägt der Test fehl und sagt mir nicht den Grund dafür sollte sein "res.json
wurde nicht mit bla bla bla Parameter aufgerufen").
Ich bin mir auch nicht sicher, das ist die richtige Methode, Test Controller-Methoden zu verbinden, da sie kein Versprechen zurückgeben Ich kann Chai-as-versprochene oder Versprechen Ketten überhaupt nicht verwenden, so habe ich die next()
Rückruf verwendet (was immer mit restify aufgerufen wird), um die Behauptung zu machen, das könnte nicht richtig sein, also bin ich offen für einen vollständigen Refactor, um diesen Test am richtigsten zu machen.
Vielen Dank im Voraus!