Angular单元测试模拟paramMap get

时间:2018-11-26 11:06:24

标签: angular unit-testing karma-runner

我有一个组件,它代表列表中的一个项目,要获得该项目,我使用this.route.snapshot.paramMap.get('id')。我该如何嘲笑? 我尝试过

providers: [
                {
                    provide: ActivatedRoute,
                    useValue: { snapshot: { params: convertToParamMap({ id: '1' }) } }
                }
            ]

但这会导致

  

TypeError:无法读取未定义的属性“ get”

1 个答案:

答案 0 :(得分:1)

您正在提供

{ snapshot: { params: convertToParamMap({ id: '1' }) }  因此它的snapshot.params

在尝试通过this.route.snapshot.paramMap进行访问时

如您所见,模拟中没有paramMap

您将对象提供为“值”这一事实并不意味着该对象将自动成为ActivatedRoute的实例。它就是您定义的-普通对象。没有运行时类型控件,因此允许这样做。

您可以简单地提供部分实现,例如

 useValue: { snapshot: { paramMap: {get:(id:number)=>{id:1}}}}

或在组件中为此属性制作吸气剂-这将允许您在该吸气剂调用上spy,对其进行拦截并返回所需的值。