You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 08:52:11