【问题标题】:Not able to increase code coverage in Angular Unit testing无法增加 Angular 单元测试中的代码覆盖率
【发布时间】:2020-01-27 12:01:35
【问题描述】:

我正在尝试学习如何使用 Karma 和 Jasmine 为 Angular 进行单元测试。

我的问题是我使用 spyOn() 和 expect.toHaveBeenCalled() 实现了它,即使 Karma 说它通过了测试,代码覆盖率也没有更新。

我是角度单元测试的新手,我不知道如何正确测试方法以获得代码覆盖率。

感谢大家的帮助。

【问题讨论】:

  • 你只测试了这两种方法中的一种......
  • 顺便说一句,注入服务的目的是什么,创建一个新服务但仍然不使用任何这些实例,因为您的方法是静态的?!您应该从类中提取这些方法并将它们导出为单独的函数,或者创建实例方法。
  • 我知道我只是在测试一个。问题是我正在测试的那个没有被标记为已测试,而我没有测试的那个被标记为已测试。
  • 正如我所说,我是单元测试的新手,也许这就是我进行无意义注入的原因。
  • spyOn(EnvironmentService, 'isProduction'); 覆盖服务方法,然后EnvironmentService.isProduction(); 正在调用间谍而不是您的方法。因此不会调用您的方法。有效的测试将删除间谍和类似expect(EnvironmentService.isProduction()).toBe(false)

标签: angular unit-testing karma-jasmine karma-coverage


【解决方案1】:

spyOn(EnvironmentService, 'isProduction'); 覆盖服务方法,然后EnvironmentService.isProduction(); 正在调用间谍而不是您的方法。因此不会调用您的方法。有效的测试将删除间谍并且看起来像expect(EnvironmentService.isProduction()).toBe(false)

【讨论】:

    【解决方案2】:

    实际上,您不仅需要创建一个间谍,还需要执行它来增加覆盖范围。间谍用存根替换了间谍功能。如果你想正常调用这个spy函数,你需要在你的spy中添加.and.callThrough()

    spyOn(EnvironmentService, 'isProduction').and.callThrough()
    

    您也可以在这里阅读更多内容:about spy and callThrough

    【讨论】:

    • 很高兴知道。也感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 2010-10-14
    • 2012-01-18
    • 2021-02-03
    相关资源
    最近更新 更多