在我的Angular 4组件中,我有类似的东西:
s="52.01317215 1121.53601074 1049.63146973 1540.70495605 517.47277832
85.62935638 553.46118164 106.97449493 1.70361996 550.58435059
159.12145996 714.25854492"
for s1 in s.split(" "):
print(s1.split(".")[0])
我正在尝试创建一个假设如下的模拟:
constructor(private route: ActivatedRoute) {
}
ngOnInit() {
this.myId = this.route.snapshot.params['myId'];
}
我的测试失败了:
TypeError:无法读取未定义的属性'params'。
我怎么想嘲笑它?我是否误解了class MockActivatedRoute extends ActivatedRoute {
public params = Observable.of({ myId: 123 });
}
的正确用法,应该更好地在我的组件中使用ActivatedRoute
?我看到一些复杂的例子,人们嘲笑快照本身,但对我来说它看起来过于复杂。
测试本身很简单:
router.subscribe
如果我只是将测试下的方法更改为以下内容 - 测试有效:
describe('ngOnInit', () => {
it('should set up initial state properly',
() => {
const component = TestBed.createComponent(MyComponent).componentInstance;
component.ngOnInit();
expect(component.myId).toEqual('123');
});
});
显然我需要模拟Activated快照,但是有更好的方法吗?
答案 0 :(得分:16)
好的,我已经找到了如何以简单的方式模拟ActivatedRoute快照。这样的事情对我有用:
providers: [MyComponent, {
provide: ActivatedRoute,
useValue: {snapshot: {params: {'myId': '123'}}}
}
谢谢:)
答案 1 :(得分:9)
如果使用route.snapshot.paramMap.get('uuid')代替:
import { ActivatedRoute, convertToParamMap } from '@angular/router';
{
provide: ActivatedRoute, useValue:
{ snapshot: { paramMap: convertToParamMap( { 'uuid': '99-88-77' } ) } }
}
答案 2 :(得分:0)
您的代码中存在一个基本的语法错误
代替
this.myId = this.route.snapshot.params['myId'];
使用
this.myId = this.route.snapshot.paramMap.get('myId');
您现在可以成功模拟参数。
我假设您已声明字段属性 myId 。