我需要能够模拟已激活的路由参数,以便能够测试我的组件。

到目前为止,这是我最好的尝试,但是没有用。

{ provide: ActivatedRoute, useValue: { params: [ { 'id': 1 } ] } },

在实际组件中使用ActivatedRoute,如下所示:
this.route.params.subscribe(params => {
    this.stateId = +params['id'];

    this.stateService.getState(this.stateId).then(state => {
        this.state = state;
    });
});

我当前尝试遇到的错误很简单:
TypeError: undefined is not a constructor (evaluating 'this.route.params.subscribe')
任何帮助将不胜感激。

最佳答案

模拟必须反射(reflect)要替换的对象。您使用.subscribe是因为它返回的是一个可观察的对象,而不仅仅是对象,因此您的模拟值也应该这样:

import { Observable } from 'rxjs/Rx';

...

{ provide: ActivatedRoute, useValue: { 'params': Observable.from([{ 'id': 1 }]) } }

09-05 22:38
查看更多