#javascript #jestjs #throw
#javascript #jestjs #выбросить
Вопрос:
Шутка .toThrow
не реагировать на ошибку выброса (‘некоторый текст’)
Этот код создает исключение
if (!['diff', 'plain', 'json'].includes(format.toLowerCase())) {
throw Error('Wrong format');
}
Я пытаюсь обработать это в тестах с
test('tree, yml, plan, Exception_', () => {
const fileName1 = '__tests__/__fixtures__/before.json';
const fileName2 = '__tests__/__fixtures__/after.jso';
expect(genDiff(fileName1, fileName2)).toThrow();
});
Но этот тест не пройден
Это странно, потому что это обрабатывается правильно:
test('t', () => {
expect(() => {
throw Error();
}).toThrow();
});
Как исправить эту проблему?
Вот функция
const genDiff = (fileName1, fileName2, format = 'diff') => {
const wrongFiles = checkForWrongFiles([fileName1, fileName2]);
if (wrongFiles.length !== 0) {
const errorMessage = `Could not find this files:n ${wrongFiles.join('n')}`;
throw errorMessage;
}
if (!['diff', 'plain', 'json'].includes(format.toLowerCase())) {
throw Error('Wrong format');
}
...
return resu<
};
Комментарии:
1. Где находится ваша
genDiff
функция?2. Привет, пожалуйста, добавьте содержимое файлов и как нам все
genDiff
. Мы не можем угадать содержимое этой функции и контекстformat
.3. genDiff — основная функция, в index.js
4. @АндрейДенисов добавьте эту функцию в вопрос.
5. Увы, содержимое формата и файла полностью исключено, потому что исключение генерируется перед любой обработкой. Я мог бы поместить это if в первую строку в функции genDiff, я в шутку увижу исключение своими глазами, но тест не пройден.
Ответ №1:
Вы должны обернуть вызов в функцию, которая выдает, иначе ошибка не улавливается утверждениями (см. Примечание внизу). Обратите внимание, что я заключил вызов в genDiff
внутри функции.
test('tree, yml, plan, Exception_', () => {
const fileName1 = '__tests__/__fixtures__/before.json';
const fileName2 = '__tests__/__fixtures__/after.jso';
expect(() => genDiff(fileName1, fileName2)).toThrow();
});