Как проверить роутер, если в шаблоне нет роутера-розетки?

Я тестирую угловой компонент 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: /", Поэтому я думаю, что мне нужно только выяснить, как решить первичную проблему.

0 ответов

Другие вопросы по тегам