我对node.js和Mocha很新。我想测试以下功能:
querybackend = function(url,queryParams) {
var backendData ={};
request({url:url, qs:queryParams}, function(err, response, body) {
if(err) { console.log(err); return; }
var data = JSON.parse(body);
var length = data.length;
var tmp = data[0].DataPoints[0].length;
var in_sum =Array.apply(null, new Array(tmp)).map(Number.prototype.valueOf,0);
var timestamp = [];
var index1;
var index2;
for(index1=0;index1 < length;index1++) {
var length2=data[index1].DataPoints.length;
for(index2=0;index2<length2;index2++) {
in_sum[index2]= in_sum[index2] + data[index1].DataPoints[index2][1];
timestamp[index2] = data[index1].DataPoints[index2][0];
}
}
backendData.count = in_sum;
backendData.timestamp = timestamp;
deferred.resolve(backendData);
});
return deferred.promise;
};
测试此功能的正确方法是什么?此函数命中一个休息端点,获取一个JSON,解析它并返回一个对象。
这是我得到的示例JSON:
[
{
"Name": "name1",
"DataPoints": [
[
1410627915,
242221
]
]
},
{
"Name": "name2",
"DataPoints": [
[
1410627913,
238157
]
]
},
{
"Name": "name3",
"DataPoints": [
[
1410627922,
215045
]
]
}
]
我应该嘲笑请求吗?我如何在摩卡模拟它?
答案 0 :(得分:0)
如果要使用mocha创建模拟或存根,则需要使用某个模块。 Sinon.js(http://sinonjs.org/)是一个很棒的,很容易使用,并且记录良好。
我认为你应该模拟请求函数来调用回调函数,并使用你的休息端点应该发送给你的答案。
然后,您可以测试您的功能应该完成的所有内容是否已正确完成。顺便说一句,如果你想测试一个函数是否被调用,你可以用sinon在这个函数上创建一个间谍。
答案 1 :(得分:0)
我发现使用nock
来确定请求并返回API应该返回的内容更为方便。
通过这种方法,您还可以在不同的测试用例中检查该函数是否可以正常处理404或502之类的错误响应。
简单示例:
describe( 'querybackend', function () {
it( 'should request the passed in URL', async function () {
// Intercept requests to https://example.org/ and reply with HTTP 200 code
const scope = nock( 'https://example.org' )
.get( '/' )
.reply( 200 );
// Call the function we are testing
await querybackend( 'https://example.org/' );
// Make sure the nock scope was properly called
scope.done();
} );
} );
我建议阅读nock文档,以了解如何测试不同的请求和响应。