2017-08-31 6 views
0

私は単体テストしたいサービスがあります。これは現在のjson配列オブジェクトを持ち、このオブザーバブルがサブスクライブされているときは正常に動作します。角度2/4ジャスミンユニットがjsonオブジェクト構造のサービスをテストしています

しかし、単体テストには何が間違っていますか?

サービスコード

getTrackerData(): (Observable<any>) { 
    return Observable.of(tracker) 
     .do(data => console.log('trackerdata', data)) 
     .catch(this.handleError) 
} 

private handleError(error: Response) { 
    console.error(error); 
    return Observable.throw(error.json().error || 'Server error'); 
} 

}

DATA

const tracker = 
[{ 
    "tracker": "2278474849", "task": 1, "agent": 1, "session": "2278474849-1-1" 
} 
] 

ユニットテスト

/// <reference path="../../../../node_modules/@types/jasmine/index.d.ts" /> 
import { TestBed, fakeAsync, inject, tick, async, ComponentFixture, ComponentFixtureAutoDetect } from '@angular/core/testing'; 
import { MockBackend } from '@angular/http/testing' 
import { Http, BaseRequestOptions, Response, ResponseOptions } from '@angular/http' 
import { BrowserModule, By } from "@angular/platform-browser"; 
import { ReactiveFormsModule } from '@angular/forms'; 
import { Observable } from 'rxjs/Rx' 
import { TrackerService } from './tracker.service' 


describe('tracker service',() => { 

    let mockResponse, matchingItem, connection 

    beforeEach(async(() => { 
     TestBed.configureTestingModule({ 
      providers: [ 
       TrackerService, 
       MockBackend, 
       BaseRequestOptions, 
       { 
        provide: Http, 
        useFactory: (backend, defaultOptions) => new Http(backend, defaultOptions), 
        deps: [MockBackend, BaseRequestOptions] 
       }, 
      ] 
     }); 
     const items = 
      [{ 
       "tracker": "2278474849", "task": 1, "agent": 1, "session": "2278474849-1-1" 
      } 
      ]; 
     mockResponse = new Response(new ResponseOptions({ body: items, status: 200 })); 
    })); 


    describe('getTrackerData',() => { 
     //subscribe to connection and storing it later 
     it('should return all items', inject([TrackerService, MockBackend], (service: TrackerService, backend: MockBackend) => { 
      backend.connections.subscribe(connection => { 
       connection.mockRespond(mockResponse); 
      }); 
      service.getTrackerData() //{ "tracker": "2278474849", "task": 1, "agent": 1, "session": "2278474849-1-1" } 
       .subscribe((items: any => { 
        expect(this).toBe(2); 
      })); 

    }) 

}); 

私はdescribeセクションでエラーが発生しているようですが、私はオンラインサンプルと組み合わせたプロジェクトのいくつかの例を混在させながら、javascript/angular unitテストを書くのに慣れていません。

私が欲しい/やるべきことは簡単なはずですが、まだ多くの依存関係をインポートしていますが、これは今混乱しています。

誰かが私がする必要があることを知っていますか?

+0

それを(注入、「すべてのアイテムを返す必要があります」([TrackerService、MockBackend]、: 私はまた、あなたがこれらの輸入のいずれかが必要かわかりません? –

+2

あなたはあなたが得ているエラーを共有することができますか? –

答えて

0

私はgetTestBed機能からサービスインスタンスを取得してサービスをテストしています。あなたの内describeブロックを変更してみてください:

describe('getTrackerData',() => { 
    it('should return all items', (done) => { 
     let service: TrackerService; 
     let bed = getTestBed(); 

      backend.connections.subscribe(connection => { 
       connection.mockRespond(mockResponse); 
      }); 

      service = bed.get(TrackerService); 

      service.getTrackerData() 
       .subscribe((items: any => { 
       expect(this).toBe(2); 
       done(); 
      })); 
}) 

'@angular/core/testing'からgetTestBedをインポートすることを確認します。あなたは、噴射コールに閉じ括弧を入れないでください -

import { BrowserModule, By } from "@angular/platform-browser"; 
import { ReactiveFormsModule } from '@angular/forms'; 
import { Observable } from 'rxjs/Rx' 
関連する問題