私はUT/IT用のJasmineでsinonjsの偽のサーバーを使用しています。server.autorespond=trueを設定しました。(server.autoRespondAfterのミリ秒を減らした後でもチェックされます)
問題:サーバーが要求に応答した後、コールバックがトリガーされません(サーバー要求のログとサーバー・オブジェクト自体をチェックして、応答テキストを確認できます)。Jasmineは、成功または失敗のcallback.CalledOnceのチェックに失敗します。
この問題は、次の場合には発生しません。server.respondWith(..)を設定した後にserver.respond()を使用していて、サーバーの応答後にコールバックが適切にトリガーされた。Jasmineは、成功または失敗のコールバックのチェックに合格します。CalledOnce。
私の理解では、自動応答により、サーバーは非同期要求を受け取ったときに自動的に応答します。これには、適切なコールバックの呼び出しが含まれますか?それでもserver.respondを使用する必要がありますか?
ありがとう。
コードスニペット:必要なjsonファイルを読み取り、サーバー応答として送信します。読み取られたjsonファイルは同期呼び出しです(非同期false)。
this.server = sinon.fakeServer.create();
this.server.autoRespond = true;
sinon.FakeXMLHttpRequest.useFilters = true;
sinon.FakeXMLHttpRequest.addFilter(function (method, url, async, username, password) {
// Don't fake json file read requests
if (url == inputUrl) {
return true;
}
});
this.resultfile = this.readJsonFile(inputUrl);
this.server.respondWith("GET", endUrl,
[200, { "Content-Type": "application/json" }, this.resultfile]);
console.log (this.server.requests); // Logs all requests so far
私のジャスミンスペックでは
var callbacks = [sinon.spy(),sinon.spy()];
// call the above sinon code and then make the test call below
jQuery.ajax({
url: '/abc',
success: callbacks[0]
});
// this fails, though I can see the server responded to the request.
expect(callbacks[0].calledOnce).toBeTruthy();