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