My Controller = > ниже контроллер использует метод reqpoertService.getFiles и сам этот метод использует внешние API для вызова данных.
function getFiles(req, res) {
reportService.getFiles({
fromDate: req.query.fromdate,
endDate: req.query.enddate,
fileTypes: req.query.filetypes || [],
fileStatus: req.query.filestatus || []
})
.then(data => {
logger.info('-> reportService.getFiles :: Successfully fetched data',
resolveLogger({ statusCode: res.statusCode })
);
res.send(data);
})
.catch(err => {
logger.error('<- OOPS :: reportService.getFiles fail to fetch data');
res.status(statusCodes.INTERNAL_SERVER_ERROR).send({});
logger.error('<- ERROR', resolveLogger({
statusCode: res.statusCode,
errMessage: err.message,
errorStack: err
}));
});
}
Служба репортера
function getFiles() {
return new Promise((resolve, reject) => {
requestPromise(options)
.then(data => {
var duration = new Date - start;
logger.info(resolveLogger({
duration: duration + 'ms',
reqUrl: options.url,
bodyLengh: data && data.length
}));
logger.info('<= Request complete successfully.');
var resData = JSON.parse(data);
resolve(resData);
})
.catch(error => {
logger.error('=> Request failed for URL:', options.url);
reject(error);
});
});
}
Мой Unit Test Подход к тестированию выше контроллера
it('METHOD: getFiles -> should response 500 without data', done => {
nock('http://localhost:1708/fakeapi')
.get('/files')
.reply(statusCodes.INTERNAL_SERVER_ERROR);
const res = buildResponse();
const req = httpMocks.createRequest({
method: 'GET',
url: '/api/submitted-data/1/files'
});
res.on('end', function () {
var data = res._getData();
expect(data).toEqual({});
expect(statusCodes.INTERNAL_SERVER_ERROR).toBe(res.statusCode);
done();
nock.cleanAll();
});
reporterController.getFiles(req, res);
});
Может ли кто-нибудь предложить мне подход, которым я следую, является приемлемым или есть лучший подход к unit test. Поскольку я начинаю выполнять модульное тестирование.