У меня есть следующий код, и я не могу проверить линии, выделенные красным, используя Стамбул:
Тест выглядит следующим образом, но ошибок не обнаружено:
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();
}));
Вам помог мой ответ?





Когда вы шпионите за сервисом, возвращайте ниже, так как внутри подписки он его ищет:
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
Пожалуйста, посмотрите на мой ответ.