Joh*_*ika 50
对于模拟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);
}
});
};
Run Code Online (Sandbox Code Playgroud)
这是测试用例:
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');
});
Run Code Online (Sandbox Code Playgroud)
它基本上覆盖了jQuery的ajax函数,然后检查以下两件事: - 传递给ajax函数的值 - 调用成功回调并声明它执行了它应该执行的操作
rah*_*a95 15
您也可以使用.appendTo开发的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!");
}
});
Run Code Online (Sandbox Code Playgroud)
你可以通过简单地调用函数mockjax来模拟它,它可以自动包含在jQuery中:
$.mockjax({
url:"/api/user",
type:"GET",
response:function(requestData){
//handle the mock response in here
this.responseText = '{"fullname":"Mr. Foo Bar"}';
}
});
Run Code Online (Sandbox Code Playgroud)
第二个模拟函数可以包含在外部JavaScript文件中,比如说"mocks.js",唯一需要做的就是包含mockjax库(可以在https://github.com/appendto找到)/ jquery-mockjax /).唯一要记住的是,这只会模拟jQuery ajax调用,而不是所有XMLHttpRequests.如果你想这样做,那么按照@ bertvh的建议并使用Sinon.js.
| 归档时间: |
|
| 查看次数: |
11875 次 |
| 最近记录: |