使测试订阅无效

时间:2018-11-19 07:35:52

标签: angular jasmine

我想用茉莉花做一个测试,我想测试一个具有空类型的函数,当我用订阅做一个测试时遇到问题 这是我的功能:

getMenu(): void {
    this.service.getMenuItems()
    .subscribe(navigation => {
      this.navigationModel = navigation.menu;//belum test
      console.log('test menu', this.navigationModel);
    });
}

我不知道如何在无效菜单中测试订阅

1 个答案:

答案 0 :(得分:0)

您可以检查subscribe更改的对象的值。监视this.service.getMenuItems()

您实际上想要在此处进行的操作是模拟服务的行为,返回假值并测试this.navigationModel是否已相应更新。您无意测试服务或其getMenuItems方法。示例代码:

it('should change value on subscribe', () => {
  const fakeValue = {}; // your fake value
  spyOn(service, getMenuItems).and.callFake(
    () => asyncData(Object.assign({}, fakeValue)));

  component.getMenu();
  expect(component.navigationModel).toBe(fakeValue);
});

其中asyncData是一个实用函数。

export function asyncData<T>(data: T) {
  return Observable.of(data);
}

更详细的解释:https://angular.io/guide/testing#provide-a-spy-stub-herodetailservicespy

茉莉花间谍:https://jasmine.github.io/2.0/introduction.html#section-Spies

相关问题