2017-01-25 53 views
2

我试图为在Typescript/Angular2中编写的模拟服务设置一些单元测试。 当我尝试调用从服务的任何方法在我的单元测试,我得到使用observables进行单元测试模拟服务=>订阅不是函数

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} 

我希望你们能帮助我了一次。

回答

3

您应该使用Observable.of而不是Observable.create,因为您要创建RestData的流。 of

“转换参数到可观察序列”

create

了解更多关于 “由一个函数来创建从头可观察到的” ofcreate

相关问题