在摩卡中使用请求调用测试函数
Testing a function with request call in Mocha
我对node.js和摩卡很陌生。我想测试以下功能:
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;
};
测试此功能的正确方法是什么?此函数命中 rest 端点,获取 JSON,解析它并返回一个对象。
这是我得到的示例 JSON:
[
{
"Name": "name1",
"DataPoints": [
[
1410627915,
242221
]
]
},
{
"Name": "name2",
"DataPoints": [
[
1410627913,
238157
]
]
},
{
"Name": "name3",
"DataPoints": [
[
1410627922,
215045
]
]
}
]
我应该嘲笑请求吗?如何在摩卡中模拟它?
如果你想用摩卡创建模拟或存根,你需要使用一些模块。Sinon.js(http://sinonjs.org/)是一个很棒的,非常易于使用并且文档齐全。
我认为您应该模拟请求函数以调用回调函数,其中包含您的 rest 端点应该发送给您的答案。
然后,您可以测试函数应该完成的所有操作是否已正确完成。顺便说一句,如果你想测试一个函数是否被调用了,你可以用sinon创建一个对这个函数的监视。
我发现使用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文档,了解如何测试不同的请求和响应。
相关文章:
- 函数在promise被解析后被调用,但Jasmine未通过测试.为什么?
- AngularJS因果报应测试规范承诺未解析,且未调用.then()
- 当我的单元测试失败时,回调被调用了两次
- 如何对具有多个$resource调用的角度控制器进行单元测试
- Jasmine测试工厂函数调用本地函数和另一个函数-获取错误:应该是间谍,但得到了function
- 有人能解释一下evaluate()和dragAndDrop()在下面的角度测试代码中调用了什么吗
- 我可以测试jsonp ajax调用的任何公共API
- 递归 - 测试最大堆栈大小时,调用堆栈无法弹出
- AngularJS:指令限制:“E”阻止在Jasmine单元测试中调用元素click()事件
- 如何在没有空回调的情况下测试多个调用
- 如何对调用getJSON的javascript函数进行单元测试
- 使用CasperJS在页面上测试Google Analytics JavaScript调用
- 如何模拟ajax对Jasmine测试的调用
- 使用仪器从iOS自动化测试文件进行异步调用
- Protractor:测试特定的ajax调用
- 在使用Protractor进行测试时,我可以用json文件替换结果,而不是调用实际的REST端点
- 如何在测试的函数中对外部模块进行调用
- 测试React函数是用Jest调用的
- 测试angular服务内部方法调用
- 在摩卡中使用请求调用测试函数