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

Angular测试:如何验证alert是否被调用?

Angular测试:alert调用验证失败问题解决

问题出在spy创建的时机不对——你先执行了按钮点击触发alert,之后才给window.alert创建spy,这时候alert已经执行完毕,spy根本没捕获到这次调用,所以测试报错。

修正后的代码应该把spyOn放在按钮点击之前:

it('should display alert when clicking on icon', () => {
  // 先创建spy,监听window.alert
  spyOn(window, 'alert').and.callThrough();
  const button = fixture.nativeElement.querySelector('.pi-trash');
  button.click();
  expect(window.alert).toHaveBeenCalledWith('delete');
})

补充说明:

  • spy的核心作用是拦截并记录目标函数的调用,所以必须在触发目标行为(这里是按钮点击)之前完成创建,才能捕获到后续的调用。
  • 如果不需要实际弹出alert(只是验证调用逻辑),可以把and.callThrough()换成and.stub(),这样不会触发真实的alert弹窗,只记录调用信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:11:37