используйте jest mock для изолированного запуска асинхронной функции

#javascript #node.js #ecmascript-6 #jestjs

#javascript #node.js #ecmascript-6 #jestjs

Вопрос:

асинхронный ожидающий шутливый макет http-запроса в node.jest

 I can write my test like so
it('works with async/await', async () => {
  expect.assertions(1);
  const data = await user.getUserName(4);
  expect(data).toEqual('Mark');
});
  

но GetUserName будет выполнен, и он попадет в мой сервер и базу данных, как издеваться над функцией, чтобы мой тест можно было запускать изолированно?

Ответ №1:

Вам нужно на самом деле издеваться над user объектом. У меня нет полного контекста, но у вас, вероятно, есть что-то вроде const User = require('../user.js') . Итак, с помощью jest вы можете издеваться над этим, выполнив

 jest.mock('../user.js')
  

jest.mock принимает также обратный вызов, в который вы можете добавить свою собственную реализацию, но я предпочитаю иметь отдельную папку mocks, в которой вы можете сохранить свою собственную реализацию mock, поскольку это может сделать тесты немного более загроможденными.

Вы можете проверить, как она используется здесь, где вы вызываете jest.mock, а затем макет реализации.

Комментарии:

1. действительно? имитировать весь пользовательский объект?

2. Вы можете издеваться только над тем методом, который вам нужен, я нахожу его более чистым, так как позже вы сможете использовать его и для других тестов или иметь более сложную логику.