2017-01-25 5 views
2

Typescript/Angular2で書かれたモックサービスのユニットテストを設定しようとしています。 私は、通常の使用ではObservables => Subscribeが関数ではないユニットテストモックサービス

TypeError: this._subscribe is not a function 

を取得し、私のユニットテストでサービスから任意のメソッドを呼び出すようにしようとすると、サービスが正常に動作します。

マイダミーサービスは次のようになります。ここでは

import {Observable} from 'rxjs/Rx'; 
import {Zahlungsverbindung, ZahlungsverbindungArtEnum} from '../../model/zahlungsverbindung.model'; 
import {Response} from '@angular/http'; 
import {RestData} from '../RestData'; 
import {Injectable} from '@angular/core'; 

@Injectable() 
export class DummyDataServiceMock { 

    private _someData : RestData = this.createDummyData(); 


    public getDummyData(): Observable<RestData> { 
    return Observable.create(this._someData); 
    } 

    private createDummyData(): RestData { 

    let id = 1; 

    let usable = true; 
    let someValue = 'AKTUELL'; 
    let otherValue = 'Dummy Person'; 

    let restData: RestData = { 
     id: id, 
     usable: usable, 
     someValue: someValue, 
     otherValue: otherValue, 

    } 

    return restData; 
    } 

} 

がRestDataです:

export interface RestData { 
    id?: number; 
    usable?: boolean; 
    someValue?: string; 
    otherValue?: string; 
} 

そして、失敗のユニットテスト:

import {DummyDataServiceMock} from '../DummyData.service.mock.ts'; 
import {RestData} from '../RestData.ts'; 
import {TestBed, inject, async} from '@angular/core/testing'; 


describe('DummyService (Mocked)',() => { 

    let service; 


    beforeEach(() => TestBed.configureTestingModule({ 
    providers: [DummyDataServiceMock], 
    })); 

    beforeEach(inject([DummyDataServiceMock], s => { 
    service = s; 

    })); 

    it('Service should be defined', async(() => { 

    expect(service).toBeDefined(); 


    })); 

    it('Get dummy data from service', async(() => { 

    let restData: RestData; 

    service.getDummyData().subscribe(data => { 
     restData = data 
     expect(restData.id).toBeDefined(); 
    }); 


    })); 
}) 

私はセットアップには多くの方法を試してみましたテストはしましたが、どちらも機能しませんでした。 私はインターネットでも多くを検索しましたが、同じ問題を抱えている人は見つかりませんでした。 奇妙なことは、サービスが定義されていることである、と私は

を行うとき、私は得る:

Observable {_isScalar: false, _subscribe: Object} 

私はあなたたちは1つのより多くの時間を私を助けることができると思います。

答えて

3

のストリームを作成する場合は、Observable.createの代わりにObservable.ofを使用する必要があります。 of

"観察可能なシーケンスに引数を変換する" create

は "機能により、最初から観察可能を作成" しながら、

についてもっと読みますofおよびcreate

関連する問題