Как заставить .toThrow реагировать на выброс

#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();
});