How to mock an activatedRoute parent Route in angular2 for testing purposes?

后端 未结 6 488
渐次进展
渐次进展 2020-12-05 03:57

Let\'s say I have this

export class QuestionnaireQuestionsComponent {

    questions: Question[] = [];
    private loading:boolean = true;


    constructor(         


        
6条回答
  •  眼角桃花
    2020-12-05 04:46

    AcitvatedRoute is an interface according to angular2 docs, so what I did is implements a MockActivatedRoute

    import {Observable} from 'rxjs';
    import {Type} from '@angular/core';
    import {ActivatedRoute,Route,ActivatedRouteSnapshot,UrlSegment,Params,Data } from '@angular/router';
    
    export class MockActivatedRoute implements ActivatedRoute{
        snapshot : ActivatedRouteSnapshot;
        url : Observable;
        params : Observable;
        queryParams : Observable;
        fragment : Observable;
        data : Observable;
        outlet : string;
        component : Type|string;
        routeConfig : Route;
        root : ActivatedRoute;
        parent : ActivatedRoute;
        firstChild : ActivatedRoute;
        children : ActivatedRoute[];
        pathFromRoot : ActivatedRoute[];
        toString() : string{
            return "";
        };
    }
    

    and just replace the ActivatedRoute in my tests for MockActivatedRoute like this

    beforeEach(()=>{
        route = new MockActivatedRoute();
        route.parent = new MockActivatedRoute();
        route.parent.params = Observable.of({id:"testId"});
    
        questionnaireService = jasmine.createSpyObj('QuestionnaireService', ['getQuestionsForQuestionnaire']);
        questionnaireService.getQuestionsForQuestionnaire.and.callFake(() => Observable.of(undefined));
        component = new QuestionnaireQuestionsComponent(route, questionnaireService);
    });
    

提交回复
热议问题