使用jest.spyOn模拟Player类success方法时提示属性不存在
问题解决:jest.spyOn监听Player类success方法报错
问题原因
你定义的Player类中,success、faillure这类方法是箭头函数形式的类实例属性,它们会被挂载到每个类实例上,而不是Player.prototype原型对象上。jest.spyOn(Player.prototype, "success")试图在原型上查找不存在的属性,所以会抛出Property 'success' does not exist in the provided object的错误。
解决方案
方案1:将箭头函数改为原型方法
把类中的箭头函数改成普通的类方法,这样方法会挂载到Player.prototype上,就能正常使用jest.spyOn监听:
export class Player { constructor() {} async play(soundUrl: any) { const { sound } = await Audio.Sound.createAsync(soundUrl); await sound.playAsync(); }; faillure() { this.play(testFailedSound); }; success() { this.play(successSound); }; exerciceSuccess() { this.play(exerciceSuccess); }; }
修改后,原有的jest.spyOn(Player.prototype, "success")代码即可正常运行。
方案2:监听类实例上的属性
如果不想修改类的结构,可以先创建Player的实例,再监听该实例上的success属性:
const player = new Player(); // 监听实例的success方法,可按需添加mock逻辑 const successSoundSpy = jest.spyOn(player, "success").mockResolvedValue(undefined);
注意这种方式需要针对每个实例单独设置监听,因为每个实例都拥有独立的success属性。
内容的提问来源于stack exchange,提问作者Rémy Ntshaykolo
相关产品推荐
相关产品推荐

