2017-01-25 12 views
2

Я пытаюсь настроить какой-то модульный тест для моих макетных сервисов, написанных на машинописном/угловом2. Когда я пытаюсь вызвать любой метод из службы в моем модульном тестировании я получаюЕдиничный тестовый макет службы с наблюдаемыми => Подписка не является функцией

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

"создает Наблюдаемое с нуля с помощью функции"

Подробнее о of и create.

 Смежные вопросы

  • Нет связанных вопросов^_^