Строки покрытия кода внутри метода подписки в Angular 7

У меня есть следующий код, и я не могу проверить линии, выделенные красным, используя Стамбул:

Строки покрытия кода внутри метода подписки в Angular 7

Тест выглядит следующим образом, но ошибок не обнаружено:

it('should set user info JSON to local storage after successful authentication', async(() => {
    component.loginForm.get('username').setValue('test');
    component.loginForm.get('passwd').setValue('test');

    spyOn(loginService, 'postLogin').and.returnValues(of({}));

    component.sendLoginForm();

    expect(component.loginFormSuccess).toEqual(true);
    expect(component.loginFormFail).toEqual(false);

    component.loggedInUserJSON = '{"login":"test","password":"test"}';
    localStorage.setItem('loggedInUserJSON', component.loggedInUserJSON);
    fakeLocalStorage.setItem('loggedInUserJSON', component.loggedInUserJSON);

    expect(localStorage.getItem('loggedInUserJSON')).toBe(component.loggedInUserJSON);
    expect(fakeLocalStorage.getItem('loggedInUserJSON')).toBe(component.loggedInUserJSON);

    expect(component.loggedInUserJSON).toBe('{"login":"test","password":"test"}');

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

Пожалуйста, посмотрите на мой ответ.

dileepkumar jami 17.02.2019 07:32

Вам помог мой ответ?

dileepkumar jami 17.02.2019 12:06
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
2
1 431
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда вы шпионите за сервисом, возвращайте ниже, так как внутри подписки он его ищет:

 spyOn(loginService, 'postLogin').and.returnValues(of({
  result : {
     httpStatus : 200
  }
}));

Итак, когда он выполняет тест, он будет искать условие (response.result.httpStatus === 200), которое оценивается как истинный.

Точно так же в другом тесте добавьте httpStatus как 400, чтобы он выполнял другой тест. условие и следите за методом showInvalidAuthentication, ожидая, что он будет вызван.

Чтобы проверить маршрутную часть,

let routerStub = { navigate: jasmine.createSpy('navigate') };

И добавляем его в провайдеры:

providers: [{ provide: Router, useValue: routerStub }]

В тесте, когда httpStatus равно 200, ожидайте ниже

 expect(routerStub.navigate).toHaveBeenCalledWith(['/home']);

С учетом вышеизложенного ваши тесты будут охватывать строки 110 & 113

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