【问题标题】:How can I test that a function was called inside an if statement in jasmine-karma如何测试在 jasmine-karma 的 if 语句中调用了一个函数
【发布时间】:2021-11-04 16:20:57
【问题描述】:

我正在创建一个 Angular 应用程序并且我正在学习单元测试并且我想测试某些方法,但是我无法测试该函数是否进入了 if 语句。我不知道如何强迫它。你能教我怎么做吗?这是函数:

currentRoute(): void {
    const router: Router = this.injector.get(Router);
    router.events.subscribe((val) => {
        if (val instanceof NavigationEnd) {
             this.checkMenuLinks(val);
        }
    });
}

如果我运行测试覆盖,我会得到所有红色的 if 语句,因为未经测试。你能告诉我如何实现这一目标吗?非常感谢。

【问题讨论】:

  • 这与您使用的测试工具无关,更多的是与您在测试中导致发生的场景有关。您应该问自己为什么在 if 语句中编写代码 - 它解决了什么情况?虽然代码覆盖率是关于代码的,但测试应该是关于行为的。
  • 这是 Angular 中的一个常见测试场景,默认情况下,如果没有额外的努力,路由不会发生(在下面添加了一些细节)

标签: angular unit-testing testing karma-jasmine jasmine2.0


【解决方案1】:

很可能您没有在单元测试中触发路由器事件——这很正常

您应该查找 Angular RouterTestingModule

有一些关于测试路线本身的很好的教程,您将寻求触发 Navigation End 事件,该事件应该在此过程中发生。您可以在checkMenuLinks() 方法中添加jasmine spy 以检查它是否被调用

其他方法涉及模拟 Router 服务,通常这是最有效的方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多