Angular2单元测试Http MockBackend问题-无法读取mergeOptions中未定义的属性合并

Angular2 unit test Http MockBackend issue - Cannot read property merge of undefined at mergeOptions

本文关键字:mergeOptions 未定义 合并 属性 读取 Http 单元测试 MockBackend 问题 Angular2      更新时间:2023-09-26

Angular2单元测试Http MockBackend问题-无法读取mergeOptions中未定义的属性合并。

我正在尝试为我的http get promise做一个基本的单元测试。

打字脚本编译器运行良好。但当我用因果报应运行程序运行npm运行测试时,我会得到以下错误。

这是我得到的gitbash错误:无法读取mergeOptions中未定义的属性"merge"

这是我的代码:

 import {Injectable} from 'angular2/angular2';
 import {HTTP_PROVIDERS, Http, Headers} from 'angular2/http';
 @Injectable()
 export class FirebaseService{
   headers: Headers;
   constructor(public http?: Http) {   
     this.headers = new Headers();
     this.headers.append('Content-Type', 'application/json');
   }
   public getSpotifyTracks = ():Promise<Object> =>{ 
       return this.http
        .get('https://api.spotify.com/v1/tracks/0eGsygTp906u18L0Oimnem', {headers:this.headers})
        .map((response) => {
           return response.json()
        }).toPromise();  
   }
 }

这是我的测试:

 import {beforeEach, ddescribe, describe, expect, iit, inject, it, xit, injectAsync, beforeEachProviders, fakeAsync, tick} from 'angular2/testing';
 import {provide, Injector, bind} from 'angular2/angular2';
 import {HTTP_PROVIDERS, Http, MockBackend, BaseRequestOptions} from 'angular2/http';
 import {FirebaseService} from '../app/firebase-service';
 describe('Spotify Service Calls', () => {
     beforeEachProviders(() => [    
         MockBackend,
         BaseRequestOptions,
         provide(Http, {useFactory:
             function(backend, defaultOptions) {
                 return new Http(backend, defaultOptions);
             },
             deps: [MockBackend]})
     ]);
     //This test doesnt work??????????????
     it('getting tracks', inject([Http], (http) => {
         var firebaseService = new FirebaseService(http);
         var response;
         firebaseService.getSpotifyTracks().then((res) => {
             response = res;
             expect(response).not.toBe(null);
         });
     }));    
 });

我已经更新到alpha.46,它破坏了很多东西。有一点是http.get(...)调用不再返回带有.map方法的Observable。

看看是否用类似的东西替换.map

return this.http
    .get('https://api.spotify.com/v1/tracks/0eGsygTp906u18L0Oimnem', {headers:this.headers})
    .subscribe((response) => {
       return response.json()
    }).toPromise();

这就是我所做的,它很有效,但不确定这有多"正确"。。。