【发布时间】:2019-04-04 11:43:34
【问题描述】:
我正在尝试使用 jest/enzyme 编写一个单元测试,以测试 console.error() 是否已在 try/catch 的 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();
}
});
【问题讨论】:
标签: javascript unit-testing jestjs