'Express. js Asyn c Handler' - Сложность написания тестов для него - PullRequest
0 голосов
/ 28 мая 2020

У меня есть эта функция, которую я использую для передачи любых сбоев непосредственно обработчику ошибок express. Я пишу для него тесты и пытаюсь понять, как я могу правильно это проверить, правильно передав функцию.

asyncHandlerUtil. js

const asyncHandlerUtil = fn => (req, res, next) => {
    return Promise
        .resolve(fn(req, res, next))
        .catch(next);
};

module.exports = asyncHandlerUtil;

Прямо сейчас у меня (Знаю, что это неправильный банкомат)

asyncHandlerUtil.spe c. js

import asyncHandlerUtil from './asyncHandlerUtil';

describe('Given the asyncHandlerUtil function', () => {
  describe('when is is called', () => {
    let middleware;
    let fn;
    let subFn;

    beforeEach(() => {
      subFn = jest.fn();
      fn = jest.fn(() => subFn);
      middleware = asyncHandlerUtil(fn);
      middleware();
    });
    it('should call fn', () => {
      expect(fn).toHaveBeenCalledWith(subFn);
    });
  // other tests needed for rejection and catching errors.
  });
});

Спасибо!

1 Ответ

1 голос
/ 29 мая 2020

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

asyncHandlerUtil.js:

const asyncHandlerUtil = (fn) => (req, res, next) => {
  return Promise.resolve(fn(req, res, next)).catch(next);
};

module.exports = asyncHandlerUtil;

asyncHandlerUtil.test.js:

const asyncHandlerUtil = require('./asyncHandlerUtil');

describe('62063369', () => {
  it('should pass', async () => {
    const mFn = jest.fn().mockResolvedValueOnce('mocked value');
    const mReq = {};
    const mRes = {};
    const mNext = jest.fn();
    const got = await asyncHandlerUtil(mFn)(mReq, mRes, mNext);
    expect(got).toBe('mocked value');
    expect(mFn).toBeCalledWith({}, {}, mNext);
  });
});

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

 PASS  stackoverflow/62063369/asyncHandlerUtil.test.js (12.14s)
  62063369
    ✓ should pass (5ms)

---------------------|---------|----------|---------|---------|-------------------
File                 | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
---------------------|---------|----------|---------|---------|-------------------
All files            |     100 |      100 |     100 |     100 |                   
 asyncHandlerUtil.js |     100 |      100 |     100 |     100 |                   
---------------------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        14.218s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...