Я новичок в коде модульного тестирования и проиграл! Я пытаюсь выдать ошибку для следующей функции, чтобы покрыть блок catch, но не добился успеха, и я не знаю, почему.
Функция:
public initialize(): Promise<this> {
return Promise.resolve()
.then(() => this.getQueries())
.catch((error: Error) => {
this.connector.localLog.error(error, 'Failed to initialize Rest Poller Launcher:');
throw error;
});
}
Модульный тест:
it('should getQueries return error', () => {
launcher.initialize()
.then(() => {
this.getQueries = stub().throws('TypeError');
})
.catch((error: Error) => {
expect(error.message).equals('Failed to initialize Rest Poller Launcher:');
});
});
Пожалуйста помогите
getQueries возвращает JSON... но как это сделать @p.s.w.g
Если только что возвращает Json, я не вижу необходимости в блоке catch. Предположительно, он делает немного больше (например, вызывает какой-то другой метод или API или зависит от какой-то другой части приложения для генерации Json). Вам придется каким-то образом имитировать этот процесс, и это будет зависеть от вашей моделирующей среды, а также может зависеть от вашей среды тестирования. Если вы еще не выбрали фиктивный фреймворк, вам, возможно, придется сначала изучить его. Лично я использую нок для имитации REST API, но я знаю, что у Jest есть собственный имитация функциональности.
Все в порядке, мне нужно сохранить его! Я просто не знаю, как заставить getQueries возвращать ошибку @p.s.w.g
Изменено описание, проверьте сейчас, имеет ли смысл то, что мне нужно @p.s.w.g
Вам нужно будет заглушить функцию до того, как обещание будет разрешено. Пытаться:
it('should getQueries return error', () => {
launcher.getQueries = stub().throws('TypeError');
launcher.initialize()
.then(() => {
// this should not happen
})
.catch((error: Error) => {
expect(error.message).equals('Failed to initialize Rest Poller Launcher:');
});
Что делает
getQueries
? Если это зависит от какого-то другого класса или ресурса, который вы можете имитировать, просто отклоните макет или выдайте ошибку.