Jest - Как проверить, что console.error называется? - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь написать юнит-тест с использованием jest / энзима, который проверяет, был ли вызван console.error() в catch() из try/catch, но попытка сделать это либо приводит к успешному тестированию, когда оно должно бытьнеудачный, или " Ожидается, что была вызвана фиктивная функция, но она не была вызвана " ошибка.

Функция для проверки:

export const playSound = (soundName, extension = 'wav') => {
  try {
    SoundPlayer.onFinishedPlaying(success => success);
    SoundPlayer.playSoundFile(soundName, extension);
  } catch (err) {
    console.error(`Error playing sound '${soundName}':`, err);
    return err;
  }
};

Таким образом, вышеприведенный аргумент принимает один аргумент soundName, который является строкой, и я пытаюсь проверить, регистрируется ли ошибка консоли, когда не передается аргумент.

У меня совсем недавнопробовал нижеприведенное, которое, кажется, находится далеко, и ошибочно возвращает пройденный тест.

it('fails to play sound with no method arguments', async () => {
  const consoleSpy = jest
    .spyOn(console, 'error')
    .mockImplementation(() => {});
  try {
    playSound();
    expect(consoleSpy).not.toHaveBeenCalled();
  } catch (err) {
    expect(consoleSpy).toHaveBeenCalled();
  }
});

1 Ответ

1 голос
/ 04 апреля 2019

Ваша playSound функция никогда не сгенерирует, потому что вы глотаете исключение.

вам просто нужно это:

it('fails to play sound with no method arguments', async () => {
  const consoleSpy = jest
    .spyOn(console, 'error')
    .mockImplementation(() => {});
    playSound();
    expect(consoleSpy).toHaveBeenCalled();
});

вы также можете проверить возвращаемое значение вызова функции, который будет объектом исключения.

Также, если вы хотите проверить, выбрасывает ли функция, вы можете использовать

expect(function() { playSound(); }).toThrow();

, но это не удастся, если вы не перехватите исключение или переброс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...