我有两个问题:
QUnit是否支持参数化单元测试?
如何使用QUnit进行模拟,例如模拟getJSON
调用?
谢谢。
如果你想模拟ajax请求,可以尝试以下方法...
这是你想要测试的函数:
var functionToTest = function () {
$.ajax({
url: 'someUrl',
type: 'POST',
dataType: 'json',
data: 'foo=1&foo=2&foo=3',
success: function (data) {
$('#main').html(data.someProp);
}
});
};
以下是测试用例:
test('ajax mock test', function () {
var options = null;
jQuery.ajax = function (param) {
options = param;
};
functionToTest();
options.success({
someProp: 'bar'
});
same(options.data, 'foo=1&foo=2&foo=3');
same($('#main').html(), 'bar');
});
这实际上是覆盖了jQuery的ajax函数,然后检查以下两个内容: - 传递给ajax函数的值 - 调用成功回调并断言它是否按预期执行
你可以使用jQuery Mockjax插件而不是覆盖jQuery的AJAX函数。该插件基本上实现了其他答案提供的功能,但它允许进行更复杂的模拟。例如,如果你有以下函数:
$.ajax({
url:"/api/user",
type:"GET",
dataType:"json",
data:'{"uid":"foobar"}',
success:function(data){
console.log("Success!");
},
error:function(data){
console.log("Error!");
}
});
您可以使用mockjax进行模拟,只需调用jQuery自动包含的函数mockjax即可:$.mockjax({
url:"/api/user",
type:"GET",
response:function(requestData){
//handle the mock response in here
this.responseText = '{"fullname":"Mr. Foo Bar"}';
}
});
第二个模拟函数可以包含在一个外部JavaScript文件中,比如说"mocks.js",唯一需要做的就是包含mockjax库(可以在https://github.com/appendto/jquery-mockjax/找到)。需要记住的是,这将仅模拟jQuery ajax调用,而不是所有XMLHttpRequests。如果您想要这样做,那么请遵循@bertvh的建议并使用Sinon.js。请参考此链接,在您的设置/拆卸方法中模拟getJSON调用, http://www.ajaxprojects.com/ajax/tutorialdetails.php?itemid=505