Я пытаюсь написать тест для следующей функции.Тестирование предопределенной функции обратного вызова с помощью Mocha.js
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
не определено. Я предполагаю, что Mocha пытается утверждать, что resJson
является объектом, перед тем как функция services()
возвращает объект, но я не уверен, как это решить.
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()
.
Мне нужно будет внести изменения в функцию 'services()'? –
Да, как я уже сказал, вместо «return resJson» вы должны сделать callback (resJson) '. Это гарантирует, что это утверждение будет выполнено. Я отредактировал ответ с обновленной функцией 'services' – piotrbienias
А это первый раз, когда я столкнулся с этим, спасибо! :) –