2017-10-23 17 views
0

ここでhttp getサービスをテストしようとしましたが、テストは失敗します。それはなぜ機能していないのですか?私はすべての依存関係、すべてを提供してきたが、まだそれは未定義テストが失敗する理由

として応答を与えていると私はカルマのテストランナーを実行すると、テストは、次のエラー

HttpGetService should get courseList Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL

HttpGetService should get courseList async Expected undefined to be 4

を与えるために失敗しました// Http getサービス仕様テストファイル

import { async, ComponentFixture, TestBed, getTestBed, inject } from '@angular/core/testing'; 
import { MockBackend, MockConnection } from '@angular/http/testing'; 
import { HttpGetService } from './http-get.service'; 
import { 
    BaseRequestOptions, Http, XHRBackend, HttpModule, 
    Response, ResponseOptions, RequestMethod 
} from '@angular/http'; 
import {ICourseModel} from '../interface/course-model'; 

describe('HttpGetService',() => { 
    let mockBackend: MockBackend; 


    beforeEach(async(() => { 
    TestBed.configureTestingModule({ 
     providers: [ 
     HttpGetService, 
     MockBackend, 
     BaseRequestOptions, 
     { 
      provide: Http, 
      deps: [MockBackend, BaseRequestOptions], 
      useFactory: 
      (backend: XHRBackend, defaultOptions: BaseRequestOptions) => { 
      return new Http(backend, defaultOptions); 
      } 
     } 
     ], 
     imports: [ 
     HttpModule 
     ] 
    }); 
    mockBackend = getTestBed().get(MockBackend); 
    })); 


    it('should get courseList', (done) => { 
    let getDataService: HttpGetService; 

    getTestBed().compileComponents().then(() => { 
     mockBackend.connections.subscribe(
     (connection: MockConnection) => { 
      connection.mockRespond(new Response(
      new ResponseOptions({ 
       body: [ 
       { 'course': 'Mobile Development' }, 
       { 'course': 'Web Development' }, 
       { 'course': 'IOS Development' }, 
       { 'course': 'Android Development' } 
       ] 
      } 
      ))); 
     }); 

     getDataService = getTestBed().get(getDataService); 
     expect(getDataService).toBeDefined(); 

     getDataService.getData().subscribe((CourseList: ICourseModel[]) => { 
     expect(CourseList.length).toBeDefined(); 
     expect(CourseList.length).toEqual(4); 
     expect(CourseList.length).not.toBe(1); 
     done(); 
     }); 
    }); 
    }); 


    it('should check the service', 
    inject([HttpGetService], (service: HttpGetService) => { 
     expect(service).toBeTruthy(); 
    })); 

    it('should get courseList async', 
    async(inject([HttpGetService], (getDataService: HttpGetService) => { 
     mockBackend.connections.subscribe(
     (connection: MockConnection) => { 
      connection.mockRespond(new Response(
      new ResponseOptions({ 
       body: [ 
       { 'course': 'Mobile Development' }, 
       { 'course': 'Web Development' }, 
       { 'course': 'IOS Development' }, 
       { 'course': 'Android Development' } 
       ] 
      } 
      ))); 
     }); 
     getDataService.getData().subscribe(
     (response) => { 
      expect(response.length).toBe(4); 
      expect(response[0].course).toBe('Mobile Development'); 
      expect(response[1].course).toBe('Web Development'); 
      expect(response).toEqual([ 
      { 'course': 'Mobile Development' }, 
      { 'course': 'Web Development' }, 
      { 'course': 'IOS Development' }, 
      { 'course': 'Android Development' } 
      ]); 
     }); 
    }))); 
}); 

// Http servi CE

import { Injectable } from '@angular/core'; 
import { Http } from '@angular/http'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/RX'; 

@Injectable() 
export class HttpGetService { 

    constructor(private http: Http) { } 

    getData() { 
    return this.http.get('someurl/data.json').map(
     (response) => { 
     const data = response.json(); 
     const keys = Object.keys(data); 
     return data[keys[0]]; 
     } 
    ).catch(
     (error: Response) => { 
     return Observable.throw(error); 
     } 
    ); 
    } 

} 
+0

使用してみてくださいHttpClientをインポート「角度/共通/ HTTP @」から'@ angular/http'からのhttpの代わりに、あなたが使っているものは時代遅れだと私は信じています。新しいものはテストが簡単だと思います。 – Maccurt

答えて

関連する問題