简体   繁体   English

如何在angular5中测试Observable的ngrx store.select?

[英]How to test the ngrx store.select of an Observable, in angular5?

I would like to understand what is missing in the test to cover the file I'm working at, in order to achieve 100% coverage. 我想了解测试中缺少哪些内容来覆盖我正在处理的文件,以实现100%的覆盖率。 Here are the parts under attention: 以下是需要注意的部分:

Given this typescript file: 给定此打字稿文件:

constructor(
  public store: Store<AppState>
) {}

ngOnInit(): void {
  this.search$ = this.store.select(s => s.search);
}

And this test: 而这个测试:

it('should start observing the search store', () => {
  const search: any = {
    data: {}
  };
  const state = Observable.of(search);

  const store = jasmine.createSpyObj('store', ['select']);
  store.select.and.returnValue(state);
  component.store = store;

  component.ngOnInit();

  expect(component.search$).toBe(state);
});

Current test coverage: 当前的测试范围:

在此处输入图片说明

I guess what I'm missing is something very stupid I blindly do not see it. 我想我所缺少的是一个非常愚蠢的东西,我盲目地看不到。 Thanks for helping in advance. 感谢您的提前帮助。

Indeed as @shaunhusain suggested, this was the fix for the file 确实如@shaunhusain所建议的,这是该文件的修复程序

ngOnInit(): void {
  this.fetch();
  this.search$ = this.store.select(this.getStoreSearchData);
}

private getStoreSearchData(store: AppState): Search {
  return store.search;
}

and its test: 及其测试:

describe('#getStoreSearchData', () => {
  it('should return the search store', () => {
    const search: any = {
      data: {}
    };

    const store = <AppState>{search: search};

    const storeSearch = component['getStoreSearchData'](store);

    expect(storeSearch).toEqual(search);
  });
});    

and now coverage is back to 100% 现在覆盖率已恢复到100%

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM