Модульный тест Жасмин: ошибка «Ошибка: XMLHttpRequest не определен» для компонента Angular - PullRequest
0 голосов
/ 23 марта 2020

Angular CLI автоматически создал неудачный модульный тест для компонента, и у меня есть проблема, чтобы исправить это.

Сообщения: 1) WkplAmFindTabsComponent должен создать сообщение: Сбой: не удается прочитать свойство 'инжектор' с нулем "

и

" Сообщение: TypeError: Невозможно прочитать свойство 'getComponentFromError' со значением «

Когда я добавил

TestBed.initTestEnvironment(BrowserDynamicTestingModule,
            platformBrowserDynamicTesting());

, следующая ошибка:« 1) WkplAmFindTabsComponent должен создать сообщение: Failed: XMLHttpRequest не определен »

Мой компонент использует маршрутизатор из конструктора и метод из сервиса из входа.

@Input() makeHref: (param: object) => string;
constructor(private router: Router) {}
ngOnInit(): void {
   this.url = this.router.routerState.snapshot.url;
}

Мой компонентный тест модуля:

    beforeEach(async(() => {
        TestBed.resetTestEnvironment();
        TestBed.initTestEnvironment(BrowserDynamicTestingModule,
            platformBrowserDynamicTesting());

        TestBed.configureTestingModule({
            declarations: [ WkplAmFindTabsComponent ]
        })
        .compileComponents();
    }));

    it('should create', () => {
        const fixture = TestBed.createComponent(WkplAmFindTabsComponent);
        const component = fixture.componentInstance;
        fixture.detectChanges();

        expect(component).toBeTruthy();
    });
});

1 Ответ

0 голосов
/ 24 марта 2020

Поскольку вы вводите router, я думаю, вам нужно его импортировать. Это также первый раз, когда я вижу resetTestEnvironment() и initTestEnvironment, но я проигнорирую это.

Попробуйте:

  beforeEach(async(() => {
        TestBed.resetTestEnvironment();
        TestBed.initTestEnvironment(BrowserDynamicTestingModule,
            platformBrowserDynamicTesting());

        TestBed.configureTestingModule({
            imports: [RouterTestingModule], // add this line !!
            declarations: [ WkplAmFindTabsComponent ]
        })
        .compileComponents();
    }));

    it('should create', () => {
        const fixture = TestBed.createComponent(WkplAmFindTabsComponent);
        const component = fixture.componentInstance;
        fixture.detectChanges();

        expect(component).toBeTruthy();
    });
});

Хороший источник при тестировании маршрутизации: https://codecraft.tv/courses/angular/unit-testing/routing/

...