我如何测试在 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 服务,通常这是最有效的方法