1

我有两个文件: x.component 和 x.service

x.service.ts

store$: Store<DogsStore>;

constructor(private store: Store<DogsStore>) {
  this.store$ = store;
}

x.component.ts

constructor(private xService: X) {}

ngOnInit() {
  this.xService.store$.select('something').subscribe(...)
}

测试x.component我收到一个错误cannot subscribe of undefined。在x.spec.ts我使用 x.service.spy.ts 的地方

store$: Store<DogsStore>; 

如您所见,我没有初始化它,因为我不能使用类似store$: Store<DogsStore> = new Store(). 如何获取商店并将其分配给变量?也许还有其他问题可以做到这一点?

4

1 回答 1

1

如果我的问题是正确的,这里是如何做到的:

基本上,您的应用程序模块提供了商店,但您的测试没有。因此,在您的规范文件中,部分内容beforeEach应通过导入来提供:

    TestBed.configureTestingModule({
      imports: [
        SomeModule,
        StoreModule.provideStore(reducer), // or your reducer name
        ....
      ],
      ....
    });

然后监视它(仍在beforeEach通话中):

    spyOn(getTestBed().get(Store), 'dispatch').and.callThrough();

这样你的组件就会得到它。

现在要访问调度包装器,您应该将其注入测试中:

it('test something', inject([Type1, Type2, Store],
    (dep1: Type1, dep2: Type2, store) => {
       expect(store.dispatch.calls.count()).toEqual(<count_value>);
    }

现在请注意,在我未键入存储的方法签名中,这是因为否则静态检查器会抱怨store.dispatch没有成员calls

于 2017-06-05T18:26:22.157 回答