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

如何清除Jasmine中withArgs配置的SpyStrategy?

解决Jasmine Spy中withArgs配置残留的问题

核心原因

你的推测完全正确:withArgs定义的参数化返回规则优先级高于通用返回值,且这类配置不会被单纯的and.returnValue()重置操作清除,会在测试用例之间残留。

两种可行的清除方案

方案1:在beforeEach中重新创建Spy对象

最彻底的方式是把Spy对象的创建逻辑放到beforeEach里,确保每个测试用例都拿到全新的Spy,所有自定义配置都会被清空:

let inventoryServiceSpy;

beforeEach(() => {
  inventoryServiceSpy = jasmine.createSpyObj('InventoryService', ['getInventories']);
  // 每次初始化后设置通用返回值
  inventoryServiceSpy.getInventories.and.returnValue([]);
});

这样不管前一个测试用例怎么配置withArgs,下一个测试都会拿到干净的Spy,完全避免配置残留。

方案2:重置Spy的全部行为(保留Spy对象)

如果不想重新创建Spy对象,可以在beforeEach中调用and.stub()重置Spy的所有行为(包括withArgs的配置),再重新设置通用返回值:

beforeEach(() => {
  // 重置Spy的所有自定义行为,包括withArgs的规则
  inventoryServiceSpy.getInventories.and.stub();
  // 重新设置通用返回值
  inventoryServiceSpy.getInventories.and.returnValue([]);
});

and.stub()会将Spy恢复到初始状态,所有之前通过withArgs或and.returnValue()设置的规则都会被清除,之后你可以重新配置通用返回值。

额外注意

如果需要在单个测试用例结束后立即清除配置,也可以在afterEach中执行上述重置操作,效果和beforeEach一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 12:48:27