Я использую мокко, чай, синон для юнит-теста.
Я хочу провести модульное тестирование функции обработчика ошибок:
import { logger } from '../service/logger';
import { InternalServerError } from './InternalServerError';
export function errorHandler(error: any, req: any, res: any, next: any) {
logger.error(error.message);
return res.status(500).json(new InternalServerError(error.message));
}
здесь есть функция тестирования
import { expect, sinon } from '../../helpers/chai';
import { InternalServerError } from '../../../errors/InternalServerError';
import { errorHandler } from '../../../errors/ErrorHandler';
import 'mocha';
describe('ErrorHandler', () => {
it('Handles Error', () => {
const logger = {
error: sinon.spy()
};
const res = { status: sinon.stub(), json: sinon.spy() };
res.status.withArgs(500).returns(res);
const req = {};
const error = new InternalServerError();
const next = sinon.spy();
errorHandler(error, req, res, next);
return Promise.all([
expect(logger.error.withArgs(error)).to.be.calledOnce,
expect(
res.json.withArgs({
message: 'Internal server error'
})
).to.be.calledOnce
]);
});
});
вот вспомогательный файл
import * as sinon from 'sinon';
import { expect } from 'chai';
import * as chai from 'chai';
import * as sinonChai from 'sinon-chai';
import * as chaiAsPromised from 'chai-as-promised';
chai.use(sinonChai);
chai.use(chaiAsPromised);
chai.config.includeStack = true;
export { expect, sinon };
и я получил такой результат:
0 проходов (35 мс)
1 ошибка
1) ErrorHandler
Обрабатывает ошибку:
Ошибка типа: [Function: errorHandler] не является шпионом или вызовом шпиону!
как пройти этот юнит-тест.