我有一个代表列表中项目的组件,为了得到这个项目,我使用 this.route.snapshot.paramMap.get('id')
.我如何 mock 这个?
我试过了
providers: [
{
provide: ActivatedRoute,
useValue: { snapshot: { params: convertToParamMap({ id: '1' }) } }
}
]
但这导致
TypeError: Cannot read property 'get' of undefined
最佳答案
你提供{ snapshot: { params: convertToParamMap({ id: '1' }) }
所以它的 snapshot.params
当您尝试通过 this.route.snapshot.paramMap
访问它时
如您所见,没有 paramMap
在你的模拟中。
您提供对象作为“值”这一事实并不意味着该对象将自动成为 ActivatedRoute
的实例。 .它就是你定义的 - 普通对象。没有运行时类型控制,所以这是允许的。
您可以简单地提供部分实现,例如
useValue: { snapshot: { paramMap: {get:(id:number)=>{id:1}}}}
或者在你的组件中为这个属性设置 getter - 这将允许你
spy
在那个 getter 调用中,拦截它并返回所需的值。
关于Angular 单元测试模拟 paramMap 获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53479797/