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

Jasmine中Spy重赋值报错:如何在单个it块覆盖Spy返回值?

解决Jasmine重复Spy报错问题

你遇到的错误是因为Jasmine不允许对同一个方法重复执行spyOn——你已经在beforeEach里给Flags.ActionsEnabled创建了Spy,再在it块里调用spyOn就会触发冲突。

修复方法很简单,不需要重新创建Spy,直接修改已有Spy的返回值就行:

it('expects component to be hidden by default', () => {
  // 直接修改已有的Spy返回值,无需重新spyOn
  Flags.ActionsEnabled.and.returnValue(false);
  expect(hasEl('.actions-header')).toBeFalse();
});

如果后续有其他需求,还可以用这些相关操作:

  • 恢复方法原始行为:Flags.ActionsEnabled.and.callThrough();
  • 重置Spy的调用记录:Flags.ActionsEnabled.calls.reset();

要是你确实需要在测试里完全替换Spy逻辑,可以先清除已有Spy再重新创建:

it('expects component to be hidden by default', () => {
  jasmine.clearSpy(Flags.ActionsEnabled); // 清除已有Spy
  spyOn(Flags, 'ActionsEnabled').and.returnValue(false); // 重新创建Spy
  expect(hasEl('.actions-header')).toBeFalse();
});

不过第一种方法最贴合你当前的需求,只是修改返回值的话直接改已有Spy就行。

内容的提问来源于stack exchange,提问作者TechnoCorner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:07:44