【问题标题】:Karma test failing : TypeError: this.cardManagementService.getLabelList(...).replace is not a functionKarma 测试失败:TypeError: this.cardManagementService.getLabelList(...).replace is not a function
【发布时间】:2021-11-16 04:26:54
【问题描述】:

我收到 Karma 错误:

TypeError: this.cardManagementService.getLabelList(...).replace 是 不是函数

请检查我在 TS 和 Spec 文件中的代码。我想我在为 CardManagementService 编写 usevalue 时犯了一些错误。

在 TS 文件中我有以下代码:

 setCardManagementLabels(): void {
        this.cardManagementLabels.cardNumber = this.cardManagementService.getLabelList('PROFILE.CARDMGMTTAB.CARDNUM');
    
 .---Some code here --- 
    this.cardManagementService.getLabelList('PROFILE.CARDMGMTTAB.SUSPENDMESSAGENOCOVERAGE')
            .replace('{suspended}', 'suspended').replace('{suspended}', 'suspended')....................}}

对于规范文件,我有这个:

providers: [ ........{provide: CardManagementService, useValue: {getLabelList: () => of([]), getEventV: () => of([])} },......]

    fit('should test setCardManagementLabels method for suspend and no coverage reason', () => {
          component.cardStatus = 'Suspended';
          component.debitCardSuspendClosedReason = 'NO_COVERAGE';
          component.setCardManagementLabels();
         });

【问题讨论】:

    标签: angular karma-jasmine karma-coverage


    【解决方案1】:

    如果您在测试的providers 中使用useValue,则需要提供一个模拟实例,该实例具有涵盖代码中的方法。由于of([])在测试中由getLabelList()返回,所以没有任何方法称为replace

    我假设this.cardManagementService.getLabelList() 在原始代码中返回一个字符串,所以在你的情况下useValue: {getLabelList: () => "a string mocked string" 可以是一个很好的起点。

    【讨论】:

    • 感谢为我工作
    • 请考虑接受答案 ;)
    • this.titleService.setTitle(this.loginService.userDetails.clientTitle + ' 个人资料 | 卡片管理 //////////////////// ///////////////////////////////////////// ////// { provide: LoginService, useValue: {clientTitle : "a string mocked string" }}, ///////////////////// ///////////////////////////////////////////////// 错误: TypeError: Cannot read properties of undefined (reading 'clientTitle') ////////////////////////////// ////////////////////////////////////////要解决此问题的任何想法? span>
    • userDetails 很可能是未定义的,它需要用一个具有clientTitle 属性的对象来模拟。所以useValue: {userDetails: { clientTitle: "a string mocked string" }} 可能,但我不确定,如果我解释得很好。
    猜你喜欢
    • 1970-01-01
    • 2016-04-22
    • 2019-03-22
    • 1970-01-01
    • 2021-04-19
    • 2019-02-08
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    相关资源
    最近更新 更多