【发布时间】:2013-05-09 18:07:10
【问题描述】:
我在整理模拟成功条件时没有问题,但似乎无法理解在使用 Sinon 和 Qunit 进行测试时如何模拟失败/超时条件和ajax函数:
我的设置是这样的:
$(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();
}
});
});
而我的成功案例测试,运行愉快,接收/传递接收到的数据到成功方法是这样的:
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();
}
);
但是,我不知道应该放什么来代替这个:
xhr.requests[0].respond(200, { "Content-Type": "application/json" },
'[{ "responseData": "some test data" }]');
使我的 ajax 调用处理程序hear 成为失败或超时方法?我唯一能想到尝试的是:
xhr.requests[0].respond(408);
但它不起作用。
我做错了什么或者我误解了什么?非常感谢所有帮助:)
【问题讨论】:
-
超时是在给定时间内没有响应,所以不能返回超时
-
我希望 sinon 能够克服这一点,并为所有类型的响应提供标准化接口。如果我不能使用 sinon '返回'超时 - 那么我如何伪造一个?
-
我不知道 sinon 所以可能有一些特定的东西,但通常你将超时设置为 1ms,并在服务器或模拟服务器端使用等待。
-
好主意-我会尝试超时方法,但是失败方法呢,标准的sinon方法是什么?
标签: javascript unit-testing jquery qunit sinon