gpt4 book ai didi

javascript - Jasmine,使用 Promises 对 XMLHttpRequest 进行单元测试

转载 作者:行者123 更新时间:2023-12-03 05:44:07 25 4
gpt4 key购买 nike

我有以下函数,它使用 Q Promise 库

getConfig: function(params){

return this.codeApiClient.get(this.endpoints.config, params, {}).then(function(response){
return response;
}, function(err){
throw err;
});
}

上面的代码调用了如下所示的API代码(我已经缩写了代码以消除噪音)

CodeApiClient.prototype = {
get: function(endpoint, paramStr, headers){
var defer = new Q.defer();
var start_time = new Date().getTime();

var req = new XMLHttpRequest();
var url = endpoint + (paramStr.indexOf('?') !== -1 ? paramStr : '?' + paramStr);

req.open('GET', url);

req.onload = function() {
var request_time = new Date().getTime() - start_time;
// This is called even on 404 etc
if (req.status < 400) {
var response = JSON.parse(req.response)
response.__request_time = request_time;
defer.resolve(response);
} else {
// Otherwise reject with the status text
defer.reject(Error(req.statusText));
}
};
}

我的问题是:如何为 getConfig 编写 Jasmine 测试,即伪造响应并 stub 底层 XMLHttpRequest ?sinon.js 能做到这一点吗?我知道它可以在 $.ajax 上 stub 回调,但我不确定如何使用 Promise 库(例如 Q)来执行此操作。请注意,这是纯 JavaScript,没有 Angular 等

最佳答案

  • 以下是如何使用callFake在 Jasmine 中返回 promise 。
  • 现在,Q 和传统的 jQuery 都提供了延迟对象,您可以用 Q.defer() 替换 $.Deferred();

var tempObj = {
getConfig: function(params){

return this.codeApiClient.get(this.endpoints.config, params, {}).then(function(response){
return response;
}, function(err){
throw err;
});
}
codeApiClient : {
get : function(){
// some get function of codeApiClient
}
}
}


it('test getConfig success', function(){
var dummyResponse = {'someDummyKey' : 'someDummyValue'};
spyOn(tempObj.codeApiClient, 'get').and.callFake(function(e){
return $.Deferred().resolve(dummyResponse).promise();
});
tempObj.getConfig({});
//any expectations
});

it('test getConfig failure', function(){
var dummyResponse = {'error' : 'someDummyFailure'};
spyOn(tempObj.codeApiClient, 'get').and.callFake(function(e){
return $.Deferred().reject(dummyResponse).promise();
});
tempObj.getConfig({});
//any expectations
});

关于javascript - Jasmine,使用 Promises 对 XMLHttpRequest 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40402773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com