Angular 单元测试模拟 paramMap 获取

标签 angular unit-testing karma-runner

我有一个代表列表中项目的组件,为了得到这个项目,我使用 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/

相关文章:

Angular 9 | NgxSpinner : Overriden methods aren't working

angular - VSCode Angular 5 Chrome 调试器问题 - 匹配空白? - 和霍尔特

typescript - 为什么当我输入特定的 url(带有 ID 参数)时,页面无法工作并引发错误 "Uncaught ReferenceError: System is not defined"?

c# - Rhino Mock 与 Debug模式?

android - 在单个 Android 项目中同时进行 JUnit 和 Cucumber 测试

javascript - 测试 Angular Controller 定义如 angular.module ('myApp' ).controller(

html - 我如何从一个组件路由到 Angular 中另一个组件的一部分?

javascript - mocha karma 测试运行程序出错

javascript - 单元测试无状态组件方法

angular - Jasmine 单元测试可观察订阅不触发