开玩笑-如何测试console.error被调用?

时间:2019-04-04 11:43:35

标签: javascript unit-testing jestjs

我正在尝试用玩笑/酶编写一个单元测试,以测试console.error()的{​​{1}}中是否调用过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

1 个答案:

答案 0 :(得分:1)

您的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();

但是这将失败,除非您没有捕获到异常或重新抛出。