Проверка появления закусочной в сервисной спецификации - PullRequest
0 голосов
/ 14 марта 2019

Итак, я пишу юнит-тесты для приложения Angular.У меня есть этот errorHandlerService с функцией handle (), которая получает класс String или Error, обрабатывает его и, в конце концов, открывает snackBar с различными сообщениями в соответствии с типом ошибки.

error-handler.service.ts

@Injectable({
  providedIn: 'root'
})
export class ErrorHandlerService {

  constructor(
    public snackBar: MatSnackBar
  ) { }

   handle(errorResponse: any) {
    let msg: string;

    if (typeof errorResponse === 'string') {
      msg = errorResponse;

    } else if (errorResponse instanceof HttpErrorResponse
      && errorResponse.status >= 400 && errorResponse.status <= 499) {
        msg = 'Error processing your request.';

        if (errorResponse.status === 403) {
          msg = 'You're not allowed to execute this action.';
        }

        console.error('Error occurred', errorResponse);
     } else {
        msg = 'Error processing remote service. Try again later.';
        console.error('Error occurred', errorResponse);
     }

    this.snackBar.open(msg);
  }
}

Мой подход к тестированию - просто оценить, открыта ли закусочная, учитывая, что это все равно произойдет.Но как я могу это сделать?Вот мой файл .spec.ts

error-handler.service.spec.ts

describe('ErrorHandlerService', () => {
  beforeEach(() => TestBed.configureTestingModule({
    imports: [RouterTestingModule],
    providers: [
      { provide: MatSnackBar, useValue: {} }
    ]
}));

it('should be created', () => {
 const service: ErrorHandlerService = TestBed.get(ErrorHandlerService);
 expect(service).toBeTruthy();
});

it('should call handle function and check snackBar occurrence', () => {
  const service: ErrorHandlerService = TestBed.get(ErrorHandlerService);
  service.handle('testing error');

  expect(service.snackBar.open).toHaveBeenCalled();
 });
});

Я ценю любую помощь.Спасибо

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Спасибо Роберту Табу за помощь!Работало нормально.Мне просто нужно было внести некоторые изменения, как показано ниже:

error-handler.service.ts (в конце файла)

   this.callSnackBar(msg);
 }

 callSnackBar(msg: string) {
   this.snackBar.open(msg);
 }

И вфайл spec.ts Я сделал это:

error-handler.service.spec.ts

beforeEach(() => {
  service = TestBed.get(ErrorHandlerService);
});

...

it('should call handle function and check snackBar occurrence', () => {
  const spy = spyOn(service, 'callSnackBar');
  const msg = 'Service_MethodToTest_ExpectOpenToBeCalled';

  service.handle(msg);
  expect(spy).toHaveBeenCalledWith(msg);
});
0 голосов
/ 14 марта 2019

Прежде всего я бы объявил службу выше beforeEach и инициализировал ее в ней:

 let service: ErrorhandlerService;
 beforeEach(() => {.... service = TestBet.get(ErrorHandlerService); })

В ней я сделаю так:

let spy = spyOn(service.snackBar, "open")

service.handle(msg);

А потом ожидаю:

(spy).toHaveBeenCalledWith(msg)

Предложение: Я бы добавил в него какое-то конкретное имя.Что-то вроде Service_MethodToTest_ExpectOpenToBeCalled.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...