node.js - 业力管道测试:_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
});
解决方案
您应该确保您的代码中满足以下条件:
- 在“规范”中,您不包括 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 中进行某种服务调用,则尤其如此。