Angular 4:如何测试订阅中的事件

时间:2017-08-21 17:39:34

标签: angular

我有一个组件,在构造函数中,我订阅了一个事件。

我通过活动服务发送活动

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属性不会改变。

有人可以在推理中解释我的错误吗? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

您在测试中实例化服务,但是在哪里/如何将其注入组件?我怀疑你使用了不同的实例。

如果您已在TestBed配置中将服务添加为提供者,则可以使用注入器获取该实例:

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

然后你可以调用sendMessage方法,你应该在组件中得到一些东西。