Как проверить роутер, если в шаблоне нет роутера-розетки?
Я тестирую угловой компонент 2 (HomeComponent
), где мне нужно проверить маршрутизатор, перейдите по нажатию кнопки. Но у меня есть проблема. Так как мой компонент использует оба [routerLink]
директива, а также router.navigate
метод, мне нужно использовать RouterTestingModule
выполнить то же самое. (см. мои ссылки здесь и здесь). Также обратите внимание, что шаблон компонента, который я тестирую, не имеет его, потому что он является дочерним по отношению к другому компоненту. Таким образом, файловая структура по существу accountModule(routing module here) > queryModule(query.QuestionComponent here and router-outlet in query.html)
,
Ниже мой код.
Моя конфигурация TestBed:
TestBed.configureTestingModule({
imports: [ CommonModule, SharedModule, RouterTestingModule
.withRoutes([
{ path: 'account/questions', component: QuestionComponent }
]),
],
declarations: [ HomeComponent, QuestionComponent, EmailFilterPipe ],
providers: [
EmailFilterPipe
],
schemas: [NO_ERRORS_SCHEMA] messages due to mocking
})
.overrideComponent(HomeComponent, {
set: {
providers: [
{provide: QuestionModel, useClass: MockQuestionModel}
],
}
})
.compileComponents();
И так как я хочу только проверить, работает ли навигация по маршруту, я создал макет QuestionComponent
,
@Component({
template: `<h2>DummyQuestionComponent</h2>`
})
class DummyQuestionComponent{}
Прецедент:
it('Should navigate to question component',async(inject([Router, Location], (router: Router, location: Location) => {
let buttons = fixture.debugElement.queryAll(By.css('button'));
buttons[1].nativeElement.click();
fixture.detectChanges();
expect(location.path()).toEqual('account/questions');
});
Мой шаблон имеет элемент кнопки, который вызывает navToNextPage()
метод, который выполняет router.navigate(['account/questions]);
Проблемы, с которыми я сталкиваюсь, это показывает ошибку
Unhandled Promise rejection: Cannot find primary outlet to load 'DummyQuestionComponent' ;
когда я следую вышеописанному методу.Я не могу использовать шпион, потому что компонент имеет
[routerLink]
директивы. Это показываетCannot read property 'root' of undefined
ошибка.Если я использую
RouterTestingModule
без маршрутов кидаетCannot match any routes. URL Segment: 'account/registration/secret-questions'
ошибка.
Как я должен проверить маршрутизатор в этом сценарии?
Обновление: я только что сделал console.log(router)
в тестовом случае, и я мог видеть, что изменение местоположения было записано под router.location.urlChanges
, Возвращает массив с двумя значениями urlChanges[0]="account/questions"
а также urlChanges[1]="replace: /"
, Поэтому я думаю, что мне нужно только выяснить, как решить первичную проблему.