Ich versuche Unit-Test ein Mungo-Objekt, das Versprechen verwendet. Ich habe den Test unten geschrieben und es funktioniert, aber es ist nicht vollständig. Ich kann nicht herausfinden, wie man testet, ob die "then" - oder "catch" -Methoden aufgerufen werden.Unit Test Mungo verspricht mit Sinon
Wie kann ich einen Spion verwenden, um zu überprüfen, ob die "then" -Methode aufgerufen wird, wenn ich das Versprechen auflöse?
Methode
export function create(req, res) {
User
.createAsync(req.body)
.then(handleCreate(res, req.originalUrl))
.catch(handleError(res));
}
Unit-Test
it('should do something',() => {
const req = {
body: 45,
};
const res = {};
const mockRole = sandbox.mock(Role).expects('createAsync').once().withArgs(45)
.returns(Promise.resolve());
controller.create(req, res);
});
UPDATE mit der Lösung zu testen I USED (6. Mai 2016)
Dank in der richtigen Richtung @ReedD mir geholfen
Obwohl dies "funktioniert", ich f Aal, als würde ich die Funktionalität von Versprechen mehr testen als meinen Code.
it('should call create with args and resolve the promise',() => {
const createSpy = sinon.spy();
const errorSpy = sinon.spy();
sandbox.stub(responses, 'responseForCreate').returns(createSpy);
sandbox.stub(responses, 'handleError').returns(errorSpy);
sandbox.mock(Role).expects('createAsync').once().withArgs(45)
.returns(Promise.resolve());
return controller.create(req, res).then(() => {
expect(createSpy.calledOnce).to.be.equal(true);
expect(errorSpy.calledOnce).to.be.equal(false);
});
});
Dank. Das hat mich auf die richtige Spur für die Lösung gebracht, die ich am Ende benutzt habe. Am Ende habe ich das Gefühl, dass ich nur die Funktionalität von Promises testen werde: D – VtoCorleone
Richtig, dieser Komponententest stellt nur sicher, dass deine create-Funktion richtig funktioniert. Sie sollten mehr Komponententests schreiben, um unabhängig voneinander sicherzustellen, dass 'handleCreate' und' handleError' auch korrekt funktionieren. – ReedD