Karma 管道测试:_this.handler.handle 不是抛出的函数

Karma Pipe Test: _this.handler.handle is not a function thrown

我的 Angular 项目中有两个管道。两者的测试看起来是一样的,只是测试是否存在。其中之一失败并显示错误消息:An error was thrown in afterAll\nUncaught TypeError: _this.handler.handle is not a function thrown

测试如下所示:

it('create an instance', () => {
    const pipe = new MyPipe();
    expect(pipe).toBeTruthy();
  });

即使我将代码更改为甚至不创建管道,它仍然会失败。

it('create an instance', () => {
    expect(true).toBeTruthy();
  });

所以测试本身似乎有问题,但我无法弄清楚原因。

karma.conf.js

config.set({
    basePath: '',
    frameworks: ['jasmine', '@angular-devkit/build-angular'],
    plugins: [
      require('karma-jasmine'),
      require('karma-chrome-launcher'),
      require('karma-jasmine-html-reporter'),
      require('karma-coverage-istanbul-reporter'),
      require('@angular-devkit/build-angular/plugins/karma'),
      require('karma-junit-reporter')
    ],
    client: {
      clearContext: false // leave Jasmine Spec Runner output visible in browser
    },
    coverageIstanbulReporter: {
      dir: require('path').join(__dirname, 'coverage'),
      reports: ['html', 'lcovonly', 'text-summary'],
      fixWebpackSourcePaths: true
    },
    reporters: config.angularCli && config.angularCli.codeCoverage
      ? ['progress', 'coverage-istanbul', 'junit']
      : ['progress', 'kjhtml', 'junit'],
    junitReporter: {
      outputFile: 'test-results.xml'
    },
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['Chrome'],
    singleRun: false
  });

您应该确保您的代码符合以下条件:

  • 在 "spec" 中你没有包含 HttpClientModule 而是使用 HttpClientTestingModule

请在此处查看有关该问题的 SO post: TypeError: _this.handler.handle is not a function error

  • 还要确保来自 http 请求的任何订阅都有一个错误块。

错误:

  this.myservice.func().subscribe(result => {
    // do stuff
  })

右:

  this.myservice.func().subscribe(result => {
    // do stuff
  }, error => {
    // process error
  })

查看关于那个的 SO post:

(最佳答案) 请注意,如果您在 ngInit 中执行某种服务调用,则尤其如此。