jasmine 2.5.2を使用して、jQuery 3.1.1を使用してAjaxリクエストを実行するコードの単体テストを記述しています。私はAjax呼び出しを模擬して、自分の応答ステータスとテキストを提供したいと思います。ジャスミンでjQuery ajaxを呼び出す
私はJasmine ajaxプラグイン(https://github.com/pivotal/jasmine-ajax)を使用しています。
XMLHttpRequestオブジェクトを使用するhttps://jasmine.github.io/2.0/ajax.htmlの例に従えば、正常に動作します。
describe("mocking ajax", function() {
describe("suite wide usage", function() {
beforeEach(function() {
jasmine.Ajax.install();
});
afterEach(function() {
jasmine.Ajax.uninstall();
});
it("specifying response when you need it", function() {
var doneFn = jasmine.createSpy("success");
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(args) {
if (this.readyState == this.DONE) {
doneFn(this.responseText);
}
};
xhr.open("GET", "/some/cool/url");
xhr.send();
expect(jasmine.Ajax.requests.mostRecent().url).toBe('/some/cool/url');
expect(doneFn).not.toHaveBeenCalled();
jasmine.Ajax.requests.mostRecent().respondWith({
"status": 200,
"contentType": 'text/plain',
"responseText": 'awesome response'
});
expect(doneFn).toHaveBeenCalledWith('awesome response');
});
});
});
NB:これは文書化の例とは少し異なり、jasmine.Ajax.requests.mostRecent().respondWith()
にjasmine.Ajax.requests.mostRecent().response()
を変更しなければなりませんでした。
jQuery Ajaxを使用すると、doneFnは決して呼び出されません。
describe("mocking ajax", function() {
describe("suite wide usage", function() {
beforeEach(function() {
jasmine.Ajax.install();
});
afterEach(function() {
jasmine.Ajax.uninstall();
});
it("specifying response when you need it", function() {
var doneFn = jasmine.createSpy("success");
$.ajax({
method: "GET",
url: "/some/cool/url"})
.done(function(result) {
doneFn(result);
});
expect(doneFn).toHaveBeenCalledWith('awesome response');
});
});
});
はジャスミンは
ジャスミン-Ajaxは XMLHttpRequestオブジェクトであなたの要求をあざけり、そうAJAX要求を行う他の のライブラリと互換性がなければならないと述べています。
$ .ajaxは、XMLHttpRequestではなく、1.4.xからjqXHRを返します。これは、Jasmine Ajaxでサポートを中断しますか?ここで
ここでは2番目のアプローチが私のために働いていました。偽は、Ajaxエラーをテストするために '$ .Deferred()。reject(obj)'を返すこともできます。ここで、objはエラーテキストを持つresponseTextプロパティを持っています。 – Lozzer
@Lozzer正しいです。延期すると、要件に基づいて解決/却下することができます。 –