Ich habe eine ES6/Aurelia App, die ich mit Jasmin zu testen. Die Methode, die ich zu testen, ich versuche, sieht etwa so aus:Unit Test Logik innerhalb Versprechen Callback
update() {
let vm = this;
vm.getData()
.then((response) => {
vm.processData(response);
});
}
Wo this.getData
ist eine Funktion, die ein Versprechen zurückgibt.
Meine Spec-Datei sieht ungefähr so aus:
describe('my service update function',() => {
it('it will call the other functions',() => {
myService = new MyService();
spyOn(myService, 'getData').and.callFake(function() {
return new Promise((resolve) => { resolve(); });
});
spyOn(myService, 'processData').and.callFake(function() { return; });
myService.update();
// this one passes
expect(myService.getData).toHaveBeenCalled();
// this one fails
expect(myService.processData).toHaveBeenCalled();
});
});
Ich verstehe, warum dies nicht gelingt - Versprechen sind asynchron und es wurde von der Zeit nicht gelöst es das erwarten trifft.
Wie kann ich die Versprechungen aus meinem Test lösen, damit ich den Code innerhalb des Rückrufs testen kann?
jsfiddle gescheiterter Test: http://jsfiddle.net/yammerade/2aap5u37/6/
Ich habe versucht, es nach dem 'myService.update()' Anruf hinzufügen, aber die zweite erwartet noch immer fehlschlägt. Lege ich es an den falschen Ort? – yammerade
erwarten Sie nach dem Aufruf von processData einen Testfall? Also, setz es hier auf die spotted Funktion –
Immer noch nicht für mich arbeiten. – yammerade