2017-08-21 61 views
2

我有一個組件,並且在構造函數中,我訂閱了一個事件。角度4:如何測試訂閱中的事件

我通過一個事件服務

import {Injectable} from '@angular/core'; 
import {Observable} from "rxjs/Observable"; 
import {Subject} from "rxjs/Subject"; 

@Injectable() 
export class EventService { 
    private sendSource = new Subject<string>(); 

    sendMessage (message: string) { 
    this.sendSource.next (message); 
    } 
getMessage(): Observable<any> { 
    return this.sendSource.asObservable(); 
} 
} 

發送事件的組件構造器:

constructor (private eventService: EventService) { 
    this.subscription = this.eventService.getMessage() 
     .subscribe (message => { 
     this.menu = message; 
     }); 
} 

代表.spec文件:

it ('should receive event', async (() => { 
    eventService = new EventService(); 
    eventService.sendMessage ('test'); 

    fixture.detectChanges(); 
    fixture.whenStable().then (() => { 
     expect (component.menu).toBeEqual('test'); 
    }); 
})); 

我的問題:this.menu屬性不當我發送一個事件時改變。

有人能解釋我在推理中的錯誤嗎? 在此先感謝。

回答

0

您正在實例化測試中的服務,但您在何處/如何將其注入到組件中?我懷疑你使用了不同的實例。

如果您已經添加了服務作爲測試牀配置的提供者,你可以使用注射器得到它的一個實例:

const eventService = fixture.debugElement.injector.get(EventService); 

然後你就可以調用的sendMessage方法,你應該得到的東西在組件。

+1

謝謝。我將服務添加爲提供程序,但我沒有使用注入器... – Mika