Qunit参数化testing和嘲笑
我有两个问题:
你可以在qunit中进行参数化的unit testing吗?
你怎么嘲笑qunit,例如嘲笑一个getJSON
调用?
谢谢
嘲笑Ajax的请求,你可以尝试这样的事情…
这是你想testing的function:
var functionToTest = function () { $.ajax({ url: 'someUrl', type: 'POST', dataType: 'json', data: 'foo=1&foo=2&foo=3', success: function (data) { $('#main').html(data.someProp); } }); };
这里是testing用例:
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函数的值 – 调用成功callback,并声明它做了它应该做的事情
而不是重写jQuery的AJAX函数,也可以使用由.appendTo开发的jQuery Mockjax插件。 这个插件基本上做了其他答案的build议,但它允许更复杂的嘲笑。 例如,如果你有这个function:
$.ajax({ url:"/api/user", type:"GET", dataType:"json", data:'{"uid":"foobar"}', success:function(data){ console.log("Success!"); }, error:function(data){ console.log("Error!"); } });
您可以通过简单地调用自动包含在jQuery中的函数mockjax来模拟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的build议并使用Sinon.js。
我刚开始使用Sinon.JS ,它允许模拟 XMLHttpRequests,并提供一个简单的假服务器API。 真的好用! 它也提供与qunit的集成。
有我的插件允许参数化qunittesting的实现: https : //github.com/AStepaniuk/qunit-parameterize
看到这个链接来模拟你的setup / teardown方法中的getJSON调用, http: //www.ajaxprojects.com/ajax/tutorialdetails.php?itemid=505