Я новичок в karma / jasmine и пытаюсь протестировать код, в котором метод компонента вызывает метод службы и ожидает возвращаемого значения.
Компонент
Вотнебольшой компонент, который я создал. isLoginRequired () вызывается в ngOnInit () , которая дополнительно выполняет this.service.checkAuthentication () .
export class AppComponent implements OnInit {
public title = 'app';
public showLoginBtn = true;
constructor(private service: CustomService) {}
ngOnInit() {
localStorage.setItem('key', '12345');
this.title = 'name changed';
this.isLoginRequired();
}
isLoginRequired() {
this.showLoginBtn = this.service.checkAuthentication();
}
}
Сервис
Это пользовательский сервис, внутри которого находится метод checkAuthentication () .
@Injectable()
export class CustomService {
constructor() { }
checkAuthentication(): boolean {
return !!localStorage.getItem('key');
}
}
Спецификации
Thisэто файл спецификации, в котором я пишу примеры модульных тестов.Пожалуйста, обратитесь к контрольному примеру # 4 .
describe('App component testing', () => {
let component: AppComponent;
let service: CustomService;
let fixture;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [
AppComponent,
CustomPipe,
CustomDirective
],
providers: [
CustomService
]
}).compileComponents();
fixture = TestBed.createComponent(AppComponent);
component = fixture.debugElement.componentInstance;
service = TestBed.get(CustomService);
});
// test case #1
it('component creation', () => {
expect(component).toBeTruthy();
});
// test case #2
it('has title "app"', () => {
expect(component.title).toBe('app');
});
// test case #3
it('isLoginRequired is triggered', () => {
spyOn(component, 'isLoginRequired');
component.ngOnInit();
expect(component.isLoginRequired).toHaveBeenCalled();
});
// test case #4
it('service.checkAuthentication is triggered', () => {
spyOn(component, 'isLoginRequired');
spyOn(service, 'checkAuthentication');
component.ngOnInit();
expect(component.isLoginRequired).toBeTruthy();
expect(service.checkAuthentication).toHaveBeenCalled();
});
});
Ошибки
Error: Expected spy checkAuthentication to have been called.
Мне действительно нужна помощь здесь.Заранее спасибо!