我有一个组件,它代表列表中的一个项目,要获得该项目,我使用this.route.snapshot.paramMap.get('id')
。我该如何嘲笑?
我尝试过
providers: [
{
provide: ActivatedRoute,
useValue: { snapshot: { params: convertToParamMap({ id: '1' }) } }
}
]
但这会导致
TypeError:无法读取未定义的属性“ get”
答案 0 :(得分:1)
您正在提供
{ snapshot: { params: convertToParamMap({ id: '1' }) }
因此它的snapshot.params
在尝试通过this.route.snapshot.paramMap
进行访问时
如您所见,模拟中没有paramMap
。
您将对象提供为“值”这一事实并不意味着该对象将自动成为ActivatedRoute
的实例。它就是您定义的-普通对象。没有运行时类型控件,因此允许这样做。
您可以简单地提供部分实现,例如
useValue: { snapshot: { paramMap: {get:(id:number)=>{id:1}}}}
或在组件中为此属性制作吸气剂-这将允许您在该吸气剂调用上spy
,对其进行拦截并返回所需的值。