angular - 如何在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);
});
当前测试覆盖率:
我想我缺少的是一些非常愚蠢的东西,我盲目地看不到它。感谢您提前提供帮助。
解决方案
确实正如@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%
推荐阅读
- jdbc - 在特定时间运行 Confluent JDBC 连接器而不是使用轮询间隔?
- python - 列出元素的计数器
- javascript - 没有类组件的 React 中的 Mapbox
- python - 如何制作一个用 CFFI 包装的 C-DLL 来回调 python
- migration - Powerbuilder 10.5:升级还是迁移?
- swift - 新外形上的游戏区域存在问题
- swift - AVPlayer,视频结束后黑屏
- java - 如何使用从@PropertySource 提取的属性
- html - 传输或处理此请求时出错。错误代码 = 10,路径 = /wardeninit
- ruby - CheckMysqlReplicationStatus CRITICAL:nil:NilClass 的未定义方法“编码”