如何以角度

时间:2017-11-28 16:17:34

标签: angular function unit-testing if-statement jasmine

我有一个函数订阅来自NGRX商店的响应,然后使用提供的变量来更改消息。

如何在变量更新时测试消息是否发生变化?

  getData() {
    this.service.getPreferences().subscribe(res => {
      this.mypreference$ = res.mypreference;
    });
    if (this.mypreference$ == false) {
      (this.mypreferenceType = 'noPreference');
    } else {
      (this.mypreferenceType = 'Preference');
    }
  }

getPreferences() { return this.store.select('user').map((state: User) => state); }

1 个答案:

答案 0 :(得分:0)

要进行您正在寻找的测试类型,您只需要存根服务的getPreferences方法。所以这样的事情应该测试函数中的一个路径:

it('getData should set mypreferenceType to noPreference when getPreferences returns false', async(() => {
  let service = TestBed.get(Service);
  let component = TestBed.createComponent(Component).componentInstance;
  spyOn(service, 'getPreferences').and.returnValue(Observable.of(false));

  component.getData();

  expect(component.mypreferenceType).toEqual('noPreference');
}));

然而正如mickaelw在评论中所说,我很确定你会发现测试会失败。 if语句将在subscribe函数中的代码之前运行。