【发布时间】:2017-07-07 02:52:13
【问题描述】:
我正在尝试为以下函数编写测试。
function services(api){
request(`${api}?action=services`, function(err, res, body) {
if (!err && res.statusCode === 200){
var resJson = JSON.parse(body);
var numberOfServices = resJson.length;
console.log("Service called: services");
console.log("-----------");
for (i = 0; i < numberOfServices; i++){
console.log("Service ID: " + resJson[i].service);
console.log("Service Name: " + resJson[i].name);
console.log("-----------");
}
return resJson;
}
});
}
测试是检查函数是否返回一个对象。 resJson 是被返回和测试的对象。
下面是使用 Mocha.js 和 Chai.js 断言库编写的测试用例。
var chai = require('chai');
var assert = chai.assert;
var sendRequest = require('../request');
describe('Test 1', function() {
var api = 'http://instant-fans.com/api/v2';
it('services() should return an object of services', function(done) {
var object = sendRequest.services(api);
assert.isObject(object);
});
});
但是,当我运行测试时,它会失败并显示以下控制台输出。说resJson 是未定义的。我猜摩卡试图在函数services()返回对象之前断言resJson是一个对象,但我不知道如何解决这个问题。
Test 1
1) services() should return an object of services
0 passing (27ms)
1 failing
1) Test 1 services() should return an object of services:
AssertionError: expected undefined to be an object
at Function.assert.isObject (node_modules/chai/lib/chai/interface/assert.js:555:35)
at Context.<anonymous> (test/requestTest.js:11:16)
我尝试在网上搜索,我看到有人使用done() 方法解决了这个问题。但是,在我的情况下,由于我在 services() 函数中使用回调,所以这不起作用。
【问题讨论】:
标签: javascript node.js testing asynchronous mocha.js