Обработчик ошибок тестирования Angular Spectator HttpErrorResponse

Обобщите проблему: я хочу протестировать свой собственный ErrorHandler с помощью Spectator и Jest. Я ожидал пройти простой тест, в котором конкретный методhandleFailFastError называется один раз за HttpErrorResponse с кодом состояния 500. Фактический результат состоит в том, чтоHttpErrorResponse рассматривается как TypeError в рамках другого метода.

Опишите, что вы пробовали: я проверил, нахожусь ли я внутри метода, и да. Проверено сconsole.logзвонит и распечатывает ошибку. Это{castToWriteable: [Function]}Объект. Следовательно, мое условие проверить, является ли это экземпляромHttpErrorResponseне работает, и мой handleError обрабатывает ответ как TypeError. Ориентировался на этом примере. Также проверил эту запись stackru.

Покажите кодErrorHandler:

    @Injectable()

    export class ErrorHandlerInterceptor implements ErrorHandler, OnDestroy {

    private _destroy$ = new Subject();

    constructor(
        private _injector: Injector
    ) {
    }

    public ngOnDestroy(): void {
        this._destroy$.next();
        this._destroy$.complete();
    }

    public handleError(error: Error | HttpErrorResponse): void {
        console.log('Did i get called?', error);
        const failFast: number[] = [401, 403, 500];
        if (error instanceof HttpErrorResponse) {
            if (navigator.onLine) {
                        if (failFast.includes(error.status)) {
                            handleFailFastError();
                        }
                        if (error.status === 409) {
                            //handleConflictError();
                        }
                        if (error.status === 400) {
                            //handleBadRequestError();
                        }
                        //handleAnythingElse();
            } else {
                //Errors, when the user is offline
                //handleOfflineError();
            }
        } else {
            //Type errors
            console.log('Type Error',error);
            //handleTypeError();
        }
    }

    //functions
    public handleFailFastError(): void {
        console.log('Handled 500');
    }

    }

Мой тест с использованием зрителя и шутки:

    import {ErrorHandlerInterceptor} from './error-handler.interceptor';
    import {createServiceFactory} from '@ngneat/spectator';
    import {createSpyObject, SpectatorService} from '@ngneat/spectator/jest';
    import {HttpErrorResponse} from '@angular/common/http';
    import {CoreModule} from '@app/core/core.module';

    describe('ErrorHandlerInterceptor', () => {
        const createErrorHandler = createServiceFactory({
            service: ErrorHandlerInterceptor,
            imports: [CoreModule],
            mocks: []
        });

        let specErrorHandler: SpectatorService<ErrorHandlerInterceptor>;
        const dummyError = createSpyObject(HttpErrorResponse);

        const handleError = (error: HttpErrorResponse): void => {
            specErrorHandler.service.handleError(dummyError);
        };

        beforeEach(() => specErrorHandler = createErrorHandler());
        it('should create the error handler', () => {
            const errorHandler = specErrorHandler.service;
            expect(errorHandler).toBeTruthy();
        });

        it('at least console should be called 2 times', () => {
            const spyConsole = spyOn(console, 'log');
            [500].forEach(status => {
                handleError(new HttpErrorResponse({status}));
                expect(spyConsole).toHaveBeenCalledTimes(5);
            });
        });

        it('should redirect, and delete sessionStorage', () => {
            [500].forEach(status => {
                handleError(new HttpErrorResponse({status}));
                expect(specErrorHandler.service.handleFailFastError).toBeCalled();
            });
        });
    });

0 ответов

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