tôi đã không có vấn đề phân loại ra chế giễu điều kiện thành công, nhưng dường như không thể hiểu được làm thế nào để chế nhạo sự thất bại/điều kiện thời gian chờ khi sử dụng Sinon và QUnit để kiểm tra và chức năng ajax:Làm cách nào để giả lập phản hồi 'hết giờ' hoặc 'lỗi' bằng Sinon/Qunit?
tôi thiết lập là thế này:
$(document).ready(function() {
module("myTests", {
setup: function() {
xhr = sinon.sandbox.useFakeXMLHttpRequest();
xhr.requests = [];
xhr.onCreate = function (request) {
xhr.requests.push(request);
};
myObj = new MyObj("#elemSelector");
},
teardown: function() {
myObj.destroy();
xhr.restore();
}
});
và kiểm tra trường hợp thành công của tôi, chạy hạnh phúc và nhận/đi qua các dữ liệu nhận được với phương pháp thành công là thế này:
test("The data fetch method reacts correctly to receiving data", function() {
sinon.spy(MyObject.prototype, "ajaxSuccess");
MyObject.prototype.fetchData();
//check a call got heard
equal(1, xhr.requests.length);
//return a success method for that obj
xhr.requests[0].respond(200, { "Content-Type": "application/json" },
'[{ "responseData": "some test data" }]');
//check the correct success method was called
ok(MyObj.prototype.ajaxSuccess.calledOnce);
MyObj.prototype.ajaxSuccess.restore();
});
Tuy nhiên, tôi không thể làm việc ra những gì tôi nên được đặt thay vì này:
xhr.requests[0].respond(200, { "Content-Type": "application/json" },
'[{ "responseData": "some test data" }]');
để làm cho trình xử lý cuộc gọi ajax của tôi 'nghe' một phương pháp thất bại hoặc hết giờ? Điều duy nhất tôi có thể nghĩ để thử là:
xhr.requests[0].respond(408);
Nhưng nó không hoạt động.
Tôi đang làm gì sai hoặc tôi đã hiểu lầm điều gì? Tất cả trợ giúp được đánh giá cao :)
Thời gian chờ là thiếu phản hồi trong thời gian nhất định, vì vậy bạn không thể trả lại thời gian chờ –
Tôi đã hy vọng tội lỗi có thể vượt qua điều đó và cung cấp giao diện chuẩn cho tất cả các loại phản hồi. Nếu tôi không thể 'trả lại' một thời gian chờ bằng cách sử dụng tội lỗi - thì làm thế nào để giả mạo? –
Tôi không biết tội lỗi vì vậy có thể có một cái gì đó cụ thể, nhưng thông thường bạn đặt thời gian chờ để nói 1ms, và sử dụng chờ đợi trên máy chủ hoặc phía máy chủ giả. –