比方说,我有这个如何在angular2中模拟一个activatedRoute父路由用于测试目的?
export class QuestionnaireQuestionsComponent {
questions: Question[] = [];
private loading:boolean = true;
constructor(
private route: ActivatedRoute,
public questionnaireService:QuestionnaireService) {}
ngOnInit(){
this.route.parent.params.subscribe((params:any)=>{
this.questionnaireService.getQuestionsForQuestionnaire(params.id).subscribe((questions)=>{
this.questions = questions;
this.loading = false;
});
});
}
}
我的部件实际上相当不错的了。问题是我想单元测试它,但我无法弄清楚如何模拟this.route.parent
对象。下面是我的测试失败
beforeEach(()=>{
route = new ActivatedRoute();
route.parent.params = Observable.of({id:"testId"});
questionnaireService = jasmine.createSpyObj('QuestionnaireService', ['getQuestionsForQuestionnaire']);
questionnaireService.getQuestionsForQuestionnaire.and.callFake(() => Observable.of(undefined));
component = new QuestionnaireQuestionsComponent(route, questionnaireService);
});
describe("on init",()=>{
it("must call the service get questions for questionnaire",()=>{
component.ngOnInit();
expect(questionnaireService.getQuestionsForQuestionnaire).toHaveBeenCalled();
});
});
测试失败,出现此错误
TypeError: undefined is not an object (evaluating 'this._routerState.parent')
尝试,只是使用'{父:{PARAMS:可观察.of({ID: “testId”}) }} as ActivatedRoute'而不是一个真正的ActivatedRoute –
不会编译我需要一个ActivatedRoute对象 –
你添加了'as ActivatedRoute'吗? –