我有两个文件: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>;
这样的东西。如何获取商店并将其分配给变量?也许还有其他问题吗?
答案 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