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 中执行某种服务调用,则尤其如此。
我的 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 中执行某种服务调用,则尤其如此。