如何在 Angular 中不使用 spyOn 的情况下在 Jasmine 单元测试中检查服务中的方法是否被调用?
How to check if a method from a service is called or not in Jasmine unit testing without using spyOn in Angular?
我在服务中有一个方法 performAnalytics() 说 analyticsService 当您单击 HTML 中的特定元素时调用它。
我正在编写单元测试用例并尝试使用 jasmine 覆盖代码。
我在 HTML 元素上触发了点击事件
testElement.dispatchEvent(new Event('click'));
。
performAnalytics() 被调用,代码覆盖成功。
performAnalytics 方法形成一个对象,然后从其他服务调用另一个方法。
现在我想写一个期望如下
expect(analyticsService.performAnalytics()).toHaveBeenCalled()
为此,我需要在方法上使用 spyOn,如下所示
spyOn<any>(analyticsService, 'performAnalytics');
但是如果我使用 spyOn,performAnalytics 方法将被模拟并且不会真正执行。因此方法 performAnalytics() 的代码覆盖率不成功。
请帮忙。我是 Angular 的新手。 spyOn 的任何其他替代方法使用 toHaveBeenCalled() ?
如果我不写期望,只是触发点击事件覆盖代码,它会显示警告为'SPEC HAS NO EXPECTATIONS'
保持你的 expect
不变,并使用 callThrough 来监视和委托对实际实现的调用:
spyOn<any>(analyticsService, 'performAnalytics').and.callThrough();
我在服务中有一个方法 performAnalytics() 说 analyticsService 当您单击 HTML 中的特定元素时调用它。
我正在编写单元测试用例并尝试使用 jasmine 覆盖代码。
我在 HTML 元素上触发了点击事件
testElement.dispatchEvent(new Event('click'));
。
performAnalytics() 被调用,代码覆盖成功。
performAnalytics 方法形成一个对象,然后从其他服务调用另一个方法。
现在我想写一个期望如下
expect(analyticsService.performAnalytics()).toHaveBeenCalled()
为此,我需要在方法上使用 spyOn,如下所示
spyOn<any>(analyticsService, 'performAnalytics');
但是如果我使用 spyOn,performAnalytics 方法将被模拟并且不会真正执行。因此方法 performAnalytics() 的代码覆盖率不成功。
请帮忙。我是 Angular 的新手。 spyOn 的任何其他替代方法使用 toHaveBeenCalled() ?
如果我不写期望,只是触发点击事件覆盖代码,它会显示警告为'SPEC HAS NO EXPECTATIONS'
保持你的 expect
不变,并使用 callThrough 来监视和委托对实际实现的调用:
spyOn<any>(analyticsService, 'performAnalytics').and.callThrough();