Mein Komponententest funktioniert aus irgendeinem Grund nicht mit der Funktion then
. Hier ist der Testcode.Versprechen, dass nicht ausgelöst wird, wenn Karma + Jasmine + PhantomJs verwendet wird?
describe("Basic promise test",() => {
it("should trigger .then function",() => {
var mock = jasmine.createSpy('some method');
var promise = new Promise((resolve, reject)=> {
console.log("inside Promise");
resolve('something');
console.log("done!");
});
promise.then(mock);
promise.then(function() { //neither works!
mock();
console.log("resolved"); //code does reach here but only after test fails
});
expect(mock).toHaveBeenCalled();
});
});
Ich habe versucht, 'babel-polyfill' mit 'es6-Versprechen' und 'Versprechen-polyfill' ohne Erfolg. Was mache ich falsch?
Jsfiddle hierfür: https://jsfiddle.net/L53zxe39/
Das Versprechen löst * asynchron * auf, daher müssen Sie Jasmins asynchrone Testfunktionen verwenden. Nach [diesem Artikel] (http://www.htmlgoodies.com/beyond/javascript/test-asynchronous-methods-using-the-jasmine-runs-and-waitfor-methods.html#fbid=Pr4UoAyeYCM) und [dies SO Antwort] (http://StackOverflow.com/a/16401978/157247), das beinhaltet 'runs' und' waitFor'. Ich würde es als Antwort posten, aber ich weiß nichts über Jasmin, vielleicht gibt es etwas Spezifischeres für Verheißungstests als 'runs' und' waistFor'. –
@ T.J.Crowder finden Sie die JSfiddle hier: https://jsfiddle.net/L53zxe39/. Ich habe bereits versucht 'waitFor' zu benutzen, aber es wirft einen Fehler auf, weil ich Jasmine 2.0 benutze (ich denke, sie haben es entfernt) – supersan
Ja, deshalb habe ich keine Antwort geschrieben, ich kenne Jasmine einfach nicht , konnte das Alter des Artikels nicht sagen, und die Antwort, die ich fand, war von 2013, bevor Versprechungen wirklich groß waren. Aber im Grunde ist das Problem, dass die Lösung asynchron ist, also muss Jasmin das wissen. Schauen Sie sich die Jasmine-Dokumentation an, um die vielversprechende API zu testen. –