В методе ngOnInit класса, который я тестирую, я вызываю функцию сервиса, который перезапускает наблюдаемое. Я реализовал макет для службы, но я пытаюсь использовать шпиона для этого точного теста.
В моем понимании, шпион перезаписывает фиктивную реализацию, если я не вызову «.and.callThrough ()» для шпиона. Проблема состоит в том, что каждый раз, когда ложная реализация все еще выполняется, я настроил шпиона для этой функции.
Я попытался переместить шпиона в раздел beforeEach, который не помог.
Также я попытался использовать шпион без расширения ".and.callFake ()". Но это не помогло.
файл spec.ts:
fdescribe('AppComponent', () => {
let fixture;
let component;
let dataServiceMock: DataServiceMock;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [RouterTestingModule],
declarations: [AppComponent],
providers: [{ provide: DataService, useClass: DataServiceMock }],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(AppComponent);
component = fixture.componentInstance;
fixture.detectChanges();
dataServiceMock = TestBed.get(DataService);
});
fit('should not show navigation if not logged in', async(() => {
spyOn(dataServiceMock,'getCurrentUser').and.callFake(() => {
console.log('IN CALL FAKE')
throwError(new Error('induced error'))
});
}));
реализация сервисного макета:
export class DataServiceMock {
currentUser: User;
private createValidUser() {
let validUser = new User();
validUser.username = 'valid';
validUser.password = 'valid';
validUser.role = 'valid';
this.currentUser = validUser;
}
public getCurrentUser(): Observable<User> {
this.createValidUser();
return of(this.currentUser);
}
ngOnInit проверяемого компонента:
ngOnInit(): void {
this.dataService.getCurrentUser().subscribe(user => {
this.currentUser = user;
console.log('received user:', this.currentUser)
})
}
Я ожидаю, что в журнале консоли выводится «IN CALL FAKE» и выдается «вызванная ошибка», но вместо этого консоль выводит «полученный пользователь:» и validUser, созданный в макете службы.