невозможно протестировать маршрутизацию с помощью RouterTestingModule

У меня есть компонент, который использует 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!


person Manu Chadha    schedule 17.12.2018    source источник


Ответы (1)


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

person Manu Chadha    schedule 17.12.2018