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

在Jasmine中测试服务initP方法后buffer属性值的问题

问题分析与修复方案

我来帮你拆解下测试失败的原因,以及对应的修复方法:

1. 间谍(Spy)的默认行为“架空”了原方法

你用spyOn(pService, 'initP')创建了一个方法间谍,但Jasmine的spyOn默认会把原方法替换成一个空实现——也就是说你调用pService.initP()的时候,根本没执行服务里那堆初始化buffer的逻辑,buffer自然还是空数组,断言肯定失败。

如果想保留原方法的功能,同时验证方法是否被调用,需要给间谍加上.and.callThrough(),它会让间谍代理原方法的执行。

2. 断言的目标和比较方式都有问题

  • 你写的expect(buffer).toBe([27, 64])里,buffer没有正确指向服务实例的属性,应该用pService.buffer;
  • 另外,Jasmine的toBe是严格引用相等,两个内容相同但引用不同的数组会判定为不相等,数组比较应该用toEqual来检查内容一致性。

修正后的完整测试代码

it('should initialise it', () => {
  // 保留原方法逻辑的间谍
  spyOn(pService, 'initP').and.callThrough();
  pService.initP();
  
  // 断言服务的buffer内容正确
  expect(pService.buffer).toEqual([27, 64]);
  // 验证方法确实被调用
  expect(pService.initP).toHaveBeenCalled();
});

这样修改后,你的测试就能正常通过啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:24:41