私の単体テストは何らかの理由でthen
関数に当てられていません。ここにテストコードがあります。Promise。その後、Karma + Jasmine + PhantomJを使用しているときにトリガーしませんか?
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();
});
});
私は「ES6-約束」と無駄に「約束-ポリフィル」、「バベル-ポリフィル」を使ってみました。私は間違って何をしていますか?
このためJsfiddle:https://jsfiddle.net/L53zxe39/
プロミスは* asynchronously *を解決するので、ジャスミンの非同期テスト機能を使用する必要があります。 [この記事](http://www.htmlgoodies.com/beyond/javascript/test-asynchronous-methodsusing-the-jasmine-runs-and-waitfor-methods.html#fbid=Pr4UoAyeYCM)と[this SO答え](http://stackoverflow.com/a/16401978/157247)で、 'runs'と' waitsFor'を使用します。私は答えとして投稿したいと思いますが、ジャスミンについては何も知りません。約束するテストは、「実行する」と「待つ」よりも具体的なものかもしれません。 –
@ T.J.Crowderここのjsfiddle:https://jsfiddle.net/L53zxe39/をご覧ください。私はすでに 'waitsFor'を使ってみましたが、Jasmine 2.0を使用しているのでエラーが発生します(削除したと思います) – supersan
ええ、私は答えを投稿しなかったので、ジャスミンは分かりません記事の時代を伝えることができず、私が見つけた答えは、約束が本当に大きくなる前の2013年からのものでした。しかし根本的には、解像度は非同期であるため、ジャスミンはそれを知る必要があります。だから、ジャスミンのドキュメントを見て、現在の約束ベースのAPIをテストする方法を調べてください。 –