首页 > 解决方案 > 如何在angular5中测试Observable的ngrx store.select?

问题描述

我想了解测试中缺少什么来覆盖我正在处理的文件,以实现 100% 的覆盖率。以下是需要注意的部分:

鉴于此打字稿文件:

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

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

而这个测试:

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);
});

当前测试覆盖率:

在此处输入图像描述

我想我缺少的是一些非常愚蠢的东西,我盲目地看不到它。感谢您提前提供帮助。

标签: angularunit-testingcode-coveragengrxngrx-store

解决方案


确实正如@shaunhusain 所建议的那样,这是文件的修复

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

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

及其测试:

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);
  });
});    

现在覆盖率恢复到 100%


推荐阅读