[英]Qunit parameterized tests and mocking
我有兩個問題:
你能在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函數的值 - 調用成功回調並聲明它執行了它應該執行的操作
您也可以使用.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!");
}
});
你可以通過簡單地調用函數mockjax來模擬它,它可以自動包含在jQuery中:
$.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。
有我的addon實現允許參數化qunit測試: https : //github.com/AStepaniuk/qunit-parameterize
請參閱此鏈接以模擬setup / teardown方法中的getJSON調用, http: //www.ajaxprojects.com/ajax/tutorialdetails.php?item = 505
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.