Ser*_*gey 4 unit-testing karma-runner angular
我有一个组件,它代表列表中的一个项目,并使用我来获取这个项目this.route.snapshot.paramMap.get('id')。我如何嘲笑这个?我试过了
providers: [
{
provide: ActivatedRoute,
useValue: { snapshot: { params: convertToParamMap({ id: '1' }) } }
}
]
Run Code Online (Sandbox Code Playgroud)
但这导致
类型错误:无法读取未定义的属性“get”
你提供
{ snapshot: { params: convertToParamMap({ id: '1' }) }
所以是 snapshot.params
当您尝试通过访问它时 this.route.snapshot.paramMap
如您所见,paramMap您的模拟中没有。
您将对象作为“值”提供这一事实并不意味着该对象将自动成为ActivatedRoute. 它就是你定义的 - 普通对象。没有运行时类型控制,所以这是允许的。
您可以简单地提供部分实现,例如
useValue: { snapshot: { paramMap: {get:(id:number)=>{id:1}}}}
Run Code Online (Sandbox Code Playgroud)
或在您的组件中为该属性创建 getter - 这将允许您spy调用该 getter 调用,拦截它并返回所需的值。
| 归档时间: |
|
| 查看次数: |
3846 次 |
| 最近记录: |