Express и sinon: тестирование функции обратного вызова app.use - PullRequest
0 голосов
/ 13 февраля 2020

Мне интересно, как проверить этот Express фрагмент:

app.use((err, req, res, next) => {
        log.debug(`${MODULE_NAME}:ErrorHandler (ERROR) --> err: ${JSON.stringify(err)}`);
        res.status(err.status).json(err);
      });

с использованием Sinon и Mocha. Я просмотрел все Inte rnet, но безрезультатно. Любая помощь будет оценена.

С уважением

1 Ответ

0 голосов
/ 14 февраля 2020

Вот решение для модульного теста:

index.js:

const express = require('express');

const log = {
  debug: console.log,
};

function createServer() {
  const app = express();
  const MODULE_NAME = 'main';
  app.use((err, req, res, next) => {
    log.debug(`${MODULE_NAME}:ErrorHandler (ERROR) --> err: ${JSON.stringify(err)}`);
    res.status(err.status).json(err);
  });
}

module.exports = createServer;

index.test.js:

const sinon = require('sinon');
const proxyquire = require('proxyquire');

describe('60206259', () => {
  it('should pass', () => {
    const mRes = { status: sinon.stub().returnsThis(), json: sinon.stub() };
    const mError = new Error('network');
    mError.status = 500;
    const appStub = { use: sinon.stub().callsFake((mw) => mw(mError, {}, mRes)) };
    const expressStub = sinon.stub().callsFake(() => appStub);
    const createServer = proxyquire('./', {
      express: expressStub,
    });

    createServer();
    sinon.assert.calledOnce(expressStub);
    sinon.assert.calledWithExactly(appStub.use, sinon.match.func);
    sinon.assert.calledWithExactly(mRes.status, 500);
    sinon.assert.calledWithExactly(mRes.status().json, mError);
  });
});

Результаты модульного теста со 100% покрытием:

60206259
main:ErrorHandler (ERROR) --> err: {"status":500}
    ✓ should pass (2802ms)


  1 passing (3s)

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |     100 |      100 |     100 |     100 |                   
 index.js |     100 |      100 |     100 |     100 |                   
----------|---------|----------|---------|---------|-------------------

Исходный код: https://github.com/mrdulin/expressjs-research/tree/master/src/stackoverflow/60206259

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...