NodeJS - 使用请求和承诺测试API

时间:2016-05-27 13:37:42

标签: node.js testing request es6-promise

我不是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)

1 个答案:

答案 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
})