我在學習測試,所以我使用karma,karma-jasmine和sinon.js構造了這個簡單的例子: 我有一個ajax請求,成功時它設置一個全局變量。 隨着sinon fakeServer我假裝的迴應,一切都很好,如果我手動發出sinon.server.respond()函數的響應。 但是將sinon fakeServer更改爲autoRespond = true,請不要按預期發音。測試失敗,因爲全局變量仍未定義。在我看來,設置爲autoRespond = true時,fakeRequest不會回答。 有沒有人建議爲什麼?謝謝你的幫助。 代碼來測試:sinon server.autoRespond
var requestResult; // global variable
function loadFirstData() {
var request = $.ajax({
url : "/rest/first/",
type : "GET",
timeout : 5000,
dataType: "json"
});
request.done(function (data) {
requestResult = data;
});
request.fail(function (jqXHR, textStatus) {
console.error("Request failed: " + textStatus);
console.error("Object: ", jqXHR);
});
}
測試:
describe('Ajax requests', function() {
var xhr;
beforeEach(function() {
xhr = sinon.fakeServer.create();
// this doesn't work
//xhr.autoRespond = true;
xhr.respondWith(
'GET',
'/rest/first/',
function (request) {
request.respond(
200,
{ "Content-Type": "application/json" },
'{ "returnValue": 20.13 }'
);
}
);
xhr.respondWith(
'GET',
'rest/second/',
function (request) {
request.respond(
200,
{ "Content-Type": "application/json" },
'{ "returnValue": 3333 }'
);
}
);
});
afterEach(function() {
xhr.restore();
});
it('should get first data', function() {
loadFirstData();
// this works
xhr.respond();
expect(requestResult).toEqual({ "returnValue": 20.13 });
});
});
對不起,但這是一個不好的做法。 – MeIr 2016-03-18 17:47:51