我正在尝试用玩笑/酶编写一个单元测试,以测试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
答案 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();
但是这将失败,除非您没有捕获到异常或重新抛出。