如何获取商店并将其分配给间谍变量

时间:2017-06-05 15:11:28

标签: angular typescript ngrx ngrx-store

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

x.service.ts

def merge_alternately2(a, b)
  if a.size < b.size
    b.gsub(/./) { a[$`.size].to_s + $& }
  else
    a.gsub(/./) { $& + b[$`.size].to_s }
  end
end

x.component.ts

store$: Store<DogsStore>;

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

测试constructor(private xService: X) {} ngOnInit() { this.xService.store$.select('something').subscribe(...) } 我收到x.component的错误。在cannot subscribe of undefined我正在使用x.service.spy.ts,我有

x.spec.ts

你可以看到我没有初始化它,因为我不能使用像store$: Store<DogsStore>; 这样的东西。如何获取商店并将其分配给变量?也许还有其他问题吗?

1 个答案:

答案 0 :(得分:1)

如果我的问题是正确的,请按以下步骤操作:

基本上,您的应用模块提供商店,但您的测试却没有。因此,在您的spec文件中,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