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