首页 > 解决方案 > 业力管道测试:_this.handler.handle 不是抛出的函数

问题描述

我的 Angular Projekt 中有两个管道。两者的测试看起来相同,只是存在测试。其中之一因错误消息而失败: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();
  });

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

业力.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
  });

标签: node.jsangularkarma-runner

解决方案


您应该确保您的代码中满足以下条件:

  • 在“规范”中,您不包括 HttpClientModule 而是使用 HttpClientTestingModule

请参阅此处关于该问题的 SO 帖子: 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 帖子: Angular5 / ng test ERROR : TypeError: this.handler.handle is not a function

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


推荐阅读