【问题标题】:Error: supportsScrollBehavior is not declared configurable错误:supportsScrollBehavior 未声明为可配置
【发布时间】:2020-02-17 09:22:39
【问题描述】:

我正在尝试监视 Angular platform 服务的函数 supportsScrollBehavior,如下所示 -

import * as platform from '@angular/cdk/platform';
  describe('Supporting Scroll Behaviour', () => {
    beforeEach(() => {
      const funcSpy = jasmine.createSpy('supportsScrollBehavior').and.returnValue(true);
      spyOnProperty(platform, 'supportsScrollBehavior', 'get').and.returnValue(funcSpy);
    });
  });
});

但它给了我一个类似下面的错误 -

Error: supportsScrollBehavior is not declared configurable

在 Angular 8 中它工作正常,但在 Angular 9 版本中它给出了这个错误。任何指针都会很有帮助。

【问题讨论】:

    标签: angular jasmine karma-jasmine angular-cdk


    【解决方案1】:

    不再可能监视单独导出的函数。 https://github.com/jasmine/jasmine/issues/1414

    有一些解决方法可能有效,但没有“适用于所有人”的解决方案。

    引用以上链接:

    实际上在 tsconfig.json 中设置 "module": "commonjs" 进行测试可以解决这个问题,您可以再次使用 spyOn。

    对我来说,这行不通。 Jasmine 需要一个放置间谍的地方,所以我创建了一个 Wrapper 类,以便将间谍安装在该类而不是模块上。

    import { supportsScrollBehavior as cdkSupportsScrollBehavior} from '@angular/cdk/platform';
    
    export class CdkWrapper {
        public static supportsScrollBehavior(...args) {
            return cdkSupportsScrollBehavior(...args);
        }
    }
    

    你在规范文件中这样使用:

    spyOn(CdkWrapper , 'supportsScrollBehavior').and.returnValue(true);
    

    请记住在您正在测试的组件中也使用该包装器!

    CdkWrapper.supportsScrollBehavior()
    

    【讨论】:

      猜你喜欢
      • 2020-11-30
      • 2020-03-10
      • 2015-02-20
      • 2019-12-04
      • 2012-09-13
      • 2014-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多