【问题标题】:Angular - Karma unit test not working, why?Angular - Karma 单元测试不起作用,为什么?
【发布时间】:2018-12-17 21:46:48
【问题描述】:

正如标题所示,我想问一下是否有人知道如何让这个单元测试通过的解决方案,在将支持服务添加到 test123 组件后,无论如何我都不会再显示 true做。 Image sample of the code and error messages

【问题讨论】:

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


    【解决方案1】:

    以后,请将代码发布为代码,而不是图像。

    如您所述,代码存在许多问题。以下是一些:

    • 您向我们展示了服务函数secondsToTimeFormat(),但在您调用this.supportService.secondsToTime() 的组件中。
    • 在组件中调用相同的函数,看起来像一个对象,没有花括号。
    • 您没有在 .spec 文件的 TestBed 的 providers 数组中提供 SupportService。
    • 由于 SupportService 没有被模拟,它会尝试调用真正的服务,这导致您看到的错误 no provider for Router!。为了隔离此组件,您应该使用间谍模拟服务调用。

    为了向您展示这一切的实际效果,我整理了这个Stackblitz

    请参阅docs 了解有关如何执行所有这些操作的详细信息。

    【讨论】:

    • 感谢您的帮助
    • 我可以再问你一个关于 Angular testin 的问题吗?
    • 我已经添加/编辑了我应该测试的组件和 html,我浏览了文档并尝试在你的示例的帮助下做一些事情,但我无法让它工作.. . 请问您是否有时间检查一下并发送有关如何工作的帮助:stackblitz.com/edit/…
    • @Kiki - 这应该是一个单独的问题,但我分叉了你的 Stackblitz 以便对其进行编辑,并在你的更新中提出了这个 Working Stackblitz。评论太详细了,所以我用我更新的内容评论了代码。
    【解决方案2】:

    您需要提供要注入组件的服务的存根。

     providers: [ 
         { 
             provide: SupportService,
             useValue: supportServiceStub 
         }
     ]
    

    在服务中定义 supportServiceStub 模拟函数的位置,在此处阅读更多信息 https://angular.io/guide/testing#component-class-testing

    【讨论】:

      猜你喜欢
      • 2016-05-14
      • 2017-07-23
      • 1970-01-01
      • 2018-02-26
      • 1970-01-01
      • 2018-04-16
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多