我不是Javascript专家,我也不明白如何处理一些Js的特殊性。
我想进行自动化测试,我想它,它有效。 算法很简单:
[for each] test [do] request()[then] testRequest()。
function requestFunction(url, KeyWord, path, expected){
request( url + path + '/', function (error, response, body) {
if (!error && response.statusCode == expected) {
msgSuccess("["+KeyWord + "] :\t\tok\t(" + expected + ')' );
}else{
msgError("["+KeyWord + "]\t\tERROR => " + error);
msgError("Error result: \n" + body);
}
});
但我想从请求中拆分测试部分,并按照承诺进行管理:
var promise1 = new Promise(requestFunction(url, KeyWord, path, expected));
var promise2 = new Promise(testRequest(error, response, body, expected));
Promise.all([promise1, promise2]).then(
console.log(KeyWord + " ok"),
showOnlyTheError(allErrors));
但我不知道如何获取并提供testRequestResult()参数(错误,响应,正文)
另一点是,我非常确定所有拒绝将被连接,结果将自动转到allErrors变量。
eg: testRequest(...){ reject("[Error]" + **ErrorNumbers** + ", ")};
最后会显示" 1,2,3," 。
但我无法解释原因,特别是如何解释?
提前致谢。
[编辑]我试过这个:
var arrayOfPaths= [
'Ping',
'PING'];
var promises = arrayOfPaths.forEach(function(path){
return new Promise(resolve => {
msgStatus(url+path+'/');
return resolve(request(url+path+'/'));
});
});
Promise.all(promises).then(
function(result){
//after all promises resolve do something with array of results
msgStatus("result " + result.body );
}
).catch(function(result){
//if any of the promises fail they will be handled here
//do something with errors
msgError("err " + result.error );
}
);
=>但是这个错误总是在捕获部分消失:
错误未定义
我的服务器收到了一个很好的请求并发回了正常的响应(statusCode = 200)
答案 0 :(得分:0)
无需将测试与请求分开。
如果你有10个做过api调用的测试,你需要做Promise.all([request1,request2,...])
。因为api调用是异步的,会在不同的时间解析promise。
我建议使用thens等待响应来解决它可能看起来像这样的承诺:
new Promise(function(resolve){
request( url + path + '/', function (error, response, body) {
return resolve({error:error,response:response,body:body})
}
}.then(function(result){
if (!result.error && result.response.statusCode == expected) {
msgSuccess("["+KeyWord + "] :\t\tok\t(" + expected + ')' );
}else{
msgError("["+KeyWord + "]\t\tERROR => " + error);
msgError("Error result: \n" + result.body);
}
})
多个请求看起来像这样
var promises = arrayOfUrlPaths.foreach(url){
return new Promise(resolve => {
return resolve(request(url))
}
}
Promise.all(promises).then(function(result){
//after all promises resolve do something with array of results
}.catch(function(result){
//if any of the promises fail they will be handled here
//do something with errors
})
)