我如何测试在 jasmine-karma 的 if 语句中调用了一个函数
How can I test that a function was called inside an if statement in jasmine-karma
我正在创建一个 Angular 应用程序,我正在学习单元测试,我想测试某些方法,但我无法测试函数是否进入 if 语句。我不知道如何强迫它。你能教我怎么做吗?这是函数:
currentRoute(): void {
const router: Router = this.injector.get(Router);
router.events.subscribe((val) => {
if (val instanceof NavigationEnd) {
this.checkMenuLinks(val);
}
});
}
如果我 运行 一个测试覆盖率,我得到所有红色的 if 语句,因为没有测试。你能告诉我如何实现这一目标吗?非常感谢。
很可能您没有在单元测试中触发路由器事件 - 这很正常
你应该查一下 Angular RouterTestingModule
有一些关于测试路由本身的好教程,您将寻求触发 Navigation End 事件,该事件应该在此过程中发生。您可以在 checkMenuLinks()
方法中添加一个 jasmine spy
来检查它是否被调用
其他方法涉及模拟 Router
服务,通常这是最有效的方法
我正在创建一个 Angular 应用程序,我正在学习单元测试,我想测试某些方法,但我无法测试函数是否进入 if 语句。我不知道如何强迫它。你能教我怎么做吗?这是函数:
currentRoute(): void {
const router: Router = this.injector.get(Router);
router.events.subscribe((val) => {
if (val instanceof NavigationEnd) {
this.checkMenuLinks(val);
}
});
}
如果我 运行 一个测试覆盖率,我得到所有红色的 if 语句,因为没有测试。你能告诉我如何实现这一目标吗?非常感谢。
很可能您没有在单元测试中触发路由器事件 - 这很正常
你应该查一下 Angular RouterTestingModule
有一些关于测试路由本身的好教程,您将寻求触发 Navigation End 事件,该事件应该在此过程中发生。您可以在 checkMenuLinks()
方法中添加一个 jasmine spy
来检查它是否被调用
其他方法涉及模拟 Router
服务,通常这是最有效的方法