【问题标题】:ng run test return error - TypeError: _this.handler.handle is not a functionng 运行测试返回错误 - TypeError: _this.handler.handle is not a function
【发布时间】:2018-07-30 20:25:45
【问题描述】:

我创建了角度为 5.2.0 的 c3 条形图。一切正常。但我只想使用 karma 和 jasmine 和 npm run test 运行测试。但是我遇到了以下问题。我希望它与 rxjs 功能有关。但我无法理解错误核心。请帮助任何人解决这个问题。

TypeError: _this.handler.handle is not a function
    at MergeMapSubscriber.project (http://localhost:9876/_karma_webpack_/webpack:/C:/Workspace/datawens-master/node_modules/@angular/common/esm5/http.js:1466:80)
    at MergeMapSubscriber.webpackJsonp.../../../../rxjs/_esm5/operators/mergeMap.js.MergeMapSubscriber._tryNext (http://localhost:9876/_karma_webpack_/webpack:/C:/Workspace/datawens-master/node_modules/rxjs/_esm5/operators/mergeMap.js:128:1)
    at MergeMapSubscriber.webpackJsonp.../../../../rxjs/_esm5/operators/mergeMap.js.MergeMapSubscriber._next (http://localhost:9876/_karma_webpack_/webpack:/C:/Workspace/datawens-master/node_modules/rxjs/_esm5/operators/mergeMap.js:118:1)
    at MergeMapSubscriber.webpackJsonp.../../../../rxjs/_esm5/Subscriber.js.Subscriber.next (http://localhost:9876/_karma_webpack_/webpack:/C:/Workspace/datawens-master/node_modules/rxjs/_esm5/Subscriber.js:92:1)
    at ScalarObservable.webpackJsonp.../../../../rxjs/_esm5/observable/ScalarObservable.js.ScalarObservable._subscribe (http://localhost:9876/_karma_webpack_/webpack:/C:/Workspace/datawens-master/node_modules/rxjs/_esm5/observable/ScalarObservable.js:51:1)
    at ScalarObservable.webpackJsonp.../../../../rxjs/_esm5/Observable.js.Observable._trySubscribe (http://localhost:9876/_karma_webpack_/webpack:/C:/Workspace/datawens-master/node_modules/rxjs/_esm5/Observable.js:172:1)
    at ScalarObservable.webpackJsonp.../../../../rxjs/_esm5/Observable.js.Observable.subscribe (http://localhost:9876/_karma_webpack_/webpack:/C:/Workspace/datawens-master/node_modules/rxjs/_esm5/Observable.js:160:1)
    at MergeMapOperator.webpackJsonp.../../../../rxjs/_esm5/operators/mergeMap.js.MergeMapOperator.call (http://localhost:9876/_karma_webpack_/webpack:/C:/Workspace/datawens-master/node_modules/rxjs/_esm5/operators/mergeMap.js:92:1)
    at Observable.webpackJsonp.../../../../rxjs/_esm5/Observable.js.Observable.subscribe (http://localhost:9876/_karma_webpack_/webpack:/C:/Workspace/datawens-master/node_modules/rxjs/_esm5/Observable.js:157:1)
    at FilterOperator.webpackJsonp.../../../../rxjs/_esm5/operators/filter.js.FilterOperator.call (http://localhost:9876/_karma_webpack_/webpack:/C:/Workspace/datawens-master/node_modules/rxjs/_esm5/operators/filter.js:61:1)

【问题讨论】:

  • ¿您找到解决方案了吗?我遇到了同样的错误,我找不到修复程序..

标签: angular karma-jasmine angular5 angular-test


【解决方案1】:

我能够通过在我的 app.module.ts 中进行以下更改来解决此问题。希望这会有所帮助。

import { HttpClient } from '@angular/common/http';
import { HttpClientModule } from '@angular/common/http';
...
...

@NgModule({
  declarations: [
    MyApp,
    HomePage,
    CameraPage,
  ],
  imports: [
    BrowserModule,
//  HttpClient,
   HttpClientModule,

【讨论】:

    【解决方案2】:

    我在尝试将我的测试转换为使用HttpTestingController 时遇到了这个问题。 This answer 只是抑制问题并将其打印到控制台。对于下面的解决方案,我仍然有很多不明白的地方,但希望它可以帮助某人。

    我的应用程序中的问题是我在providers 列表中提供了HttpHandler。这导致_this.handler 在堆栈跟踪中http.js 的违规行中成为HttpHandler

    var /** @type {?} */ events$ = concatMap.call(of(req), function (req) { return _this.handler.handle(req); });
    

    我从TestBed.configureTestModule 中的提供程序中删除了HttpHandler,然后_this.handler 是一个HttpInterceptorHandler,它具有适当的handle 函数。

    【讨论】:

    • 从 app.module.ts 中删除 HttpHandler 处理程序对我有用
    • 这解决了我在使用 Angular Storybook 时遇到的问题,我在其中创建了一个 HttpInterceptor 来捕获 API 调用,但仍在我的故事中导入 HttpHandler 作为提供程序。从我的故事中删除它可以让我的拦截器正确处理请求
    【解决方案3】:

    似乎没有错误处理的订阅会导致这种情况,如here 所述。 该链接中的答案提供了以下示例:

    user_login() {
    this.userService.login(credentials).subscribe((res) => {
    console.log(res);
    }, (error) => {
    console.log(error);
    });
    

    【讨论】:

      【解决方案4】:

      service call failedtypoerror this.handler.handle 不是函数或

      typeerror: 这个处理句柄不是一个函数

      正如比尔所说,我从提供者列表中删除了 HttpClient 和 HttpHandler 并添加了 httpclientmodule 问题将解决

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-06
        • 2017-01-04
        • 1970-01-01
        • 2018-09-23
        • 2019-03-22
        • 1970-01-01
        • 2021-04-19
        • 2019-02-08
        相关资源
        最近更新 更多