Angular5 / ng test ERROR: TypeError: this.handler.handle no es una función

Esta es mi configuración angular:

Angular CLI: 1.7.2
Node: 6.10.0
OS: win32 x64
Angular: 5.2.5
... animations, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router

@angular/cli: 1.7.2
@angular-devkit/build-optimizer: 0.3.2
@angular-devkit/core: 0.3.2
@angular-devkit/schematics: 0.3.2
@ngtools/json-schema: 1.2.0
@ngtools/webpack: 1.10.1
@schematics/angular: 0.3.2
@schematics/package-update: 0.3.2
typescript: 2.6.2
webpack: 3.11.0

Mi archivo package.json:

{
  "name": "xxxx",
  "version": "0.0.0",
  "license": "MIT",
  "scripts": {
    "ng": "ng",
    "start": "ng serve --proxy-config proxy.conf.json",
    "build": "ng build --prod",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e",
    "ng2ninja": "ng2ninja"
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "5.2.5",
    "@angular/common": "5.2.5",
    "@angular/compiler": "5.2.5",
    "@angular/core": "5.2.5",
    "@angular/forms": "5.2.5",
    "@angular/platform-browser": "5.2.5",
    "@angular/platform-browser-dynamic": "5.2.5",
    "@angular/router": "5.2.5",
    "@ng-bootstrap/ng-bootstrap": "^1.0.0",
    "bootstrap": "4.0.0",
    "core-js": "2.4.1",
    "font-awesome": "4.7.0",
    "rxjs": "5.5.6",
    "tslint-sonarts": "^1.6.0",
    "yarn": "^1.5.1",
    "zone.js": "0.8.19"
  },
  "devDependencies": {
    "@angular/cli": "^1.7.1",
    "@angular/compiler-cli": "5.2.5",
    "@angular/language-service": "5.2.5",
    "@types/jasmine": "2.8.6",
    "@types/jasminewd2": "2.0.3",
    "@types/node": "8.5.2",
    "@ng-bootstrap/ng-bootstrap": "1.0.0",
    "angular-ide": "^0.9.39",
    "codelyzer": "4.1.0",
    "jasmine-core": "2.8.0",
    "jasmine-spec-reporter": "4.2.1",
    "karma": "2.0.0",
    "karma-chrome-launcher": "2.2.0",
    "karma-coverage-istanbul-reporter": "1.3.3",
    "karma-firefox-launcher": "1.1.0",
    "karma-jasmine": "1.1.1",
    "karma-jasmine-html-reporter": "0.2.2",
    "karma-json-reporter": "1.2.1",
    "ng2ninja": "1.0.17",
    "protractor": "5.2.2",
    "ts-node": "4.1.0",
    "tslint": "5.9.1",
    "typescript": "2.6.2"
  }
}

Obtengo este mensaje de error cuando ejecuto el comando 'ng test' :

 TypeError: this.handler.handle is not a function
            at MergeMapSubscriber.__WEBPACK_IMPORTED_MODULE_2_rxjs_operator_concatMap__.a.call [as project] node_modules/@angular/common/esm2015/http.js:1174:28)
            at MergeMapSubscriber._tryNext node_modules/rxjs/_esm2015/operators/mergeMap.js:109:1)
            at MergeMapSubscriber._next node_modules/rxjs/_esm2015/operators/mergeMap.js:99:1)
            at MergeMapSubscriber.next node_modules/rxjs/_esm2015/Subscriber.js:83:1)
            at ScalarObservable._subscribe node_modules/rxjs/_esm2015/observable/ScalarObservable.js:42:1)
            at ScalarObservable._trySubscribe node_modules/rxjs/_esm2015/Observable.js:171:1)
            at ScalarObservable.subscribe node_modules/rxjs/_esm2015/Observable.js:159:1)
            at MergeMapOperator.call node_modules/rxjs/_esm2015/operators/mergeMap.js:78:1)
            at Observable.subscribe node_modules/rxjs/_esm2015/Observable.js:156:1)

Esta es mi prueba:

import {TestBed, inject} from '@angular/core/testing';
import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing';
import {UserService} from './user.service';
import {environment} from '../environments/environment';
import {JwtInterceptorService} from './jwt-interceptor.service';
import {User} from './services/model/user';
import {HttpClient, HttpHandler} from '@angular/common/http';
...
     it('should authenticate a user', () => {
        // spy on the store method
        spyOn(userService, 'storeLoggedInUser');

        const credentials = {login: 'toto', password: 'titi'};
        let actualUser;
        userService.login(credentials).subscribe(fetchedUser => actualUser = fetchedUser);
    ...
      });

Después de analizar y depurar, el problema proviene de la llamada del método de "inicio de sesión" del Servicio de usuario.

Después de haber examinado numerosas publicaciones (y soluciones), no entiendo el origen real de mi mensaje de error.

Este es mi servicio de usuario:

 login(credentials): Observable<User> {
    var headers = new HttpHeaders();
    headers.append('Content-Type', 'application/x-www-form-urlencoded');

    var paramCredentials = "grant_type=password"
      + "&credentials=true"
      + "&scope=read write"
      + "&accept=application/json"
      + "&username=" + credentials.username
      + "&password=" + credentials.password;

    return this.http.post<User>(`${environment.oAuthUrl}/oauth/token`, paramCredentials, {headers: headers}).pipe(
      tap(user => this.storeLoggedInUser(user))
    );
  }

 storeLoggedInUser(user) {
    window.localStorage.setItem('jwtToken', JSON.stringify(user));
    this.jwtInterceptorService.setJwtToken(user.token);
  }

Algunas ideas ?

Gracias por adelantado

Respuestas a la pregunta(3)

Su respuesta a la pregunta