невозможно проверить маршрутизацию с помощью RouterTestingModule - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть компонент, который использует Routes.Я хочу провести модульное тестирование маршрутов, но не могу это сделать, используя RouterTestingModule.

spec, который я написал,

import {async, ComponentFixture, fakeAsync, TestBed, tick} from '@angular/core/testing';
....


fdescribe('HomepageContentComponentComponent', () => {
  let component: HomepageContentComponentComponent;
  let fixture: ComponentFixture<HomepageContentComponentComponent>;

  beforeEach(() => {
    TestBed.configureTestingModule({
      imports:[
        RouterTestingModule.withRoutes([
          {
            path: 'new-practice-question',
            component: NewPracticeQuestionComponent
          }]),
        ReactiveFormsModule,
        HttpClientTestingModule
      ],
      declarations: [ ...
      ],
      providers:[
        {provide: Location, useClass: SpyLocation},
        {provide: LocationStrategy, useClass: MockLocationStrategy},
        {provide: NgModuleFactoryLoader, useClass: SpyNgModuleFactoryLoader}
      ]
    })
    .compileComponents();
    fixture = TestBed.createComponent(HomepageContentComponentComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });
      it('should navigate to New Questions Component when New Question button is clicked',fakeAsync(()=>{
    let router:Router = TestBed.get(Router);
    let location:Location = TestBed.get(Location);
    console.log('initial router is ',router);
    console.log('initial location is ',location);
    //router.initialNavigation();
    router.navigate(['new-practice-question']).then(()=>{
      console.log('new router is ',router);
      console.log('new location is ',location);
      expect(location.path()).toBe('/new-practice-question');
    });


  }));
});

У меня две проблемы 1) path() не похоже на определение в Location, но большинство примеров, которые я видел в Интернете, используют path().Так что сравнение в expect не удается.2) Я должен был явно указать providers для SpyLocation и т. Д. Почему?Большинство примеров, которые я видел в Интернете, похоже, просто используют RouterTestingModule.withRoots без необходимости явно указывать providers.Если я этого не сделаю, я получаю ошибку no providers for Location!

1 Ответ

0 голосов
/ 18 декабря 2018

Получил это работает.Неправильное определение Location было выбрано по неизвестной причине.Тест сработал, когда я добавил import {Location} from "@angular/common";

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...