【发布时间】:2020-03-06 07:44:43
【问题描述】:
我正在学习使用 Jest 为 ngrx8 应用程序编写单元测试。
我正在测试一个订阅了 ngOnInit 中选择器的组件:
ngOnInit(): void {
this.store.pipe(select(someSelector(this.parameter))).subscribe((res:
// some logic here
});
}
在 .spec.ts 文件中,我将 provideMockStore 放入 TestBed 配置中:
TestBed.configureTestingModule({
// ...
providers: [
provideMockStore({
initialState, // defined somewhere above
selectors: [
{
selector: someSelector('param'),
value: {a: 'b', c: 'd'}
}
]
})
]
// ...
}).compileComponents();;
所以我希望在运行这个单元测试时,我应该在组件 .ts 文件中输入订阅(“这里的一些逻辑”部分),res 将等于 {a: 'b', c: 'd'}。
这不会发生,而是忽略模拟选择器并使用真实的选择器。
我尝试过的事情:
store.overrideSelector(someSelector('param'), {a: 'b', c: 'd')将
fixture.detectChanges()、await fixture.whenStable()放在不同的地方
现在我别无选择,NGRX documentation 几乎没有涵盖任何内容。
【问题讨论】:
-
没有ngrx门面的生活很难......我建议你做一些重构并使用门面。它使测试组件变得轻而易举,因为您可以将商店模拟与组件依赖模拟分开。
标签: angular unit-testing jestjs ngrx