web-dev-qa-db-fra.com

ng exécuter une erreur de retour de test - TypeError: _this.handler.handle n'est pas une fonction

J'ai créé le graphique à barres c3 avec la version angulaire 5.2.0. Tout fonctionne bien. Mais je veux juste lancer le test en utilisant du karma et du jasmin avec npm run test. Mais j'ai eu les problèmes suivants. J'espère que c'est lié à la fonction rxjs. Mais je ne peux pas comprendre le noyau d'erreur. S'il vous plaît, aidez quelqu'un à résoudre ce problème. 

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)
4
Kevin - Dhinesh babu

J'ai pu résoudre ce problème en apportant les modifications suivantes à mon app.module.ts. J'espère que cela t'aides.

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

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

4
Prashant

J'ai rencontré ce problème en essayant de convertir mes tests pour utiliser HttpTestingController. This answer supprime simplement le problème et l'imprime sur la console. Il y a beaucoup de choses que je ne comprends toujours pas pour ma solution ci-dessous, mais j'espère que cela pourra aider quelqu'un.

Le problème dans ma candidature était que je fournissais HttpHandler dans ma liste providers. Cela causait _this.handler d'être une HttpHandler sur la ligne incriminée dans http.js, dans la trace de la pile.

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

J'ai supprimé HttpHandler des fournisseurs dans mon TestBed.configureTestModule et _this.handler était alors une HttpInterceptorHandler dotée de la fonction handle appropriée.

2
Bill

Cela ressemble à un abonnement sans traitement d'erreur peut causer cela, comme indiqué ici . La réponse dans ce lien fournit l'exemple suivant:

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