#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!
})
})