Как издеваться над функцией модуля, чтобы она выдавала исключение при вызове изнутри где-нибудь в вашем коде

#node.js #unit-testing #jestjs #mocking

#node.js #модульное тестирование #jestjs #издевательство

Вопрос:

В шутку я хочу протестировать экспресс-api, написанный следующим образом

 router.get('/api-does-something', api.middleware, async (req, res) => {
  try {
    const { destructSomeData } = req.fromValue;
    const responseData = await someModule.getSomething(destructSomeData);
    res.json(responseData);
  } catch (e) {
    errorModule.error(
      res,
      errorCodes.SERVER_ERROR,
      e
    );
  }
});
 

В шутку я знаю, как протестировать часть api try catch, но я не знаю, как издеваться someModule.getSomething(destructSomeData) , чтобы она выдавала исключение, поэтому я могу проверить с помощью jest, что было выдано исключение

Итак, мой вопрос в том, как мне издеваться someModule.getSomething(destructSomeData) , чтобы заставить его генерировать исключение в этом api?

Ответ №1:

Вам просто нужно издеваться над модулем в вашем тестовом файле и издеваться над реализацией следующим образом

 // test file
const someModule = require('./pathTo/someModule')
jest.mock('./pathTo/someModule')

describe('test', ()=>{
 it('should blow up on getSomething', async () => {
  someModule.getSomething.mockImplementation(()=> Promise.reject(new Error('Blew up')))
  
  // continue with test... it should blow up!
 })
})