Как смоделировать конструктор внутри node_module с помощью jest? - PullRequest
0 голосов
/ 19 сентября 2018

Jest имеет возможность смоделировать node_module:

jest.mock('module_name')

Модуль, который я пытаюсь смоделировать - это cote модуль. Здесь - это файл index.js из модуля.

внутри него есть конструктор для Requester экспорт

const Requester = require('./components/requester');

...

cote.Requester = Requester;

...

module.exports = cote();

Я получаю доступ к этому файлу в своем коде, как это:

const cote = require('cote');
const requester = new cote.Requester({name: 'findOnePlayer requester'});

...

const player = await requester.send({type:'findOnePlayer',username:username, password: password})

Как настроить с помощью jest, чтобы конструктор модуля Requester из смоделированного cote модуля возвращал смоделированный объект, который разрешает обещание при вызове send?

EDITМне этот случай нужен во многих тестах, и каждый send(... должен возвращать разные обещания для каждого сценария тестирования.

1 Ответ

0 голосов
/ 19 сентября 2018

«Ручной макет» модуля, который вы сначала создаете в __mocks__, а затем импортируете в свои тесты, используя jest.mock('moduleName'), позволит вам смоделировать объект requester в вашем коде.

Чтобы генерировать разные выходные данные каждый раз, когда вызывается requester.send(), можно использовать реализации фиктивных функций;то есть jest.fn() и цепочка jest.mockImplementationOnce() вызовов.Например:

const send = jest
  .fn(() => new Promise(resolve => resolve('foo')))
  .mockImplementationOnce(() => new Promise(resolve => resolve('bar')))
  .mockImplementationOnce(() => new Promise((resolve, reject) => reject()));

Когда вы запускаете последовательные тесты, когда выполняете эту фиктивную функцию send(), обещания, возвращаемые send(), разрешатся со значениями, которые мы указали выше.Для получения более подробной информации, ознакомьтесь с документацией здесь:

Ручные макеты: https://jestjs.io/docs/en/manual-mocks

Макетные реализации: https://jestjs.io/docs/en/mock-functions#mock-implementations

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