Mocking router.events.subscribe() Angular2

前端 未结 6 1202
生来不讨喜
生来不讨喜 2020-12-30 00:03

In my app.component.ts I have the following ngOnInit function:

ngOnInit() {
    this.sub = this.router.events.subscribe(e => {
      if (e instanceof Navi         


        
6条回答
  •  Happy的楠姐
    2020-12-30 00:40

    The accepted answer is correct but this is a bit simpler, you can replace

    public ne = new NavigationEnd(0, 'http://localhost:4200/login', 'http://localhost:4200/login');
      public events = new Observable(observer => {
        observer.next(this.ne);
        observer.complete();
      });
    

    by:

    public events = Observable.of( new NavigationEnd(0, 'http://localhost:4200/login', 'http://localhost:4200/login'));
    

    And find below a full test file to test the function in the question:

    import { NO_ERRORS_SCHEMA } from '@angular/core';
    import {
      async,
      TestBed,
      ComponentFixture
    } from '@angular/core/testing';
    
    /**
     * Load the implementations that should be tested
     */
    import { AppComponent } from './app.component';
    
    import { NavigationEnd, Router } from '@angular/router';
    import { Observable } from 'rxjs/Observable';
    
    
    class MockServices {
      // Router
      public events = Observable.of( new NavigationEnd(0, 'http://localhost:4200/login', 'http://localhost:4200/login'));
    }
    
    describe(`App`, () => {
      let comp: AppComponent;
      let fixture: ComponentFixture;
      let router: Router;
    
      /**
       * async beforeEach
       */
      beforeEach(async(() => {
        TestBed.configureTestingModule({
          declarations: [ AppComponent ],
          schemas: [NO_ERRORS_SCHEMA],
          providers: [
            { provide: Router, useClass: MockServices },
          ]
        })
        /**
         * Compile template and css
         */
        .compileComponents();
      }));
    
      /**
       * Synchronous beforeEach
       */
      beforeEach(() => {
        fixture = TestBed.createComponent(AppComponent);
        comp    = fixture.componentInstance;
    
        router = fixture.debugElement.injector.get( Router);
    
        /**
         * Trigger initial data binding
         */
        fixture.detectChanges();
      });
    
      it(`should be readly initialized`, () => {
        expect(fixture).toBeDefined();
        expect(comp).toBeDefined();
      });
    
      it('ngOnInit() - test that this.loggedIn is initialised correctly', () => {
        expect(comp.loggedIn).toEqual(true);
      });
    
    });
    

提交回复
热议问题