Я тестирую сервис, у которого в конструкторе есть метод checkName ().По какой-то причине, когда я пытаюсь протестировать метод checkName (), он всегда успешен, даже если тест не пройден.Однако, если я закомментирую метод в конструкторе, тест будет работать так, как должен, и не пройден.
Вот мои тесты для Service1:
describe('Service: Service1', () => {
let service1: Service1;
let service2: Service2;
beforeEach(() => {
routerStub = {
navigate: jasmine.createSpy('navigate')
};
TestBed.configureTestingModule({
providers: [
Service1,
{provide: Service2, useValue: Service2Stub},
{provide: Router, useValue: routerStub}
]
});
service1 = TestBed.get(Service1);
service2 = TestBed.get(Service2);
});
it('should fail', () => {
spyOn(service2, 'getName').and.returnValue('test');
service1.checkName();
expect(routerStub.navigate).toHaveBeenCalledWith(['bad-name-page']);
});
Вот Service1:
export class Service1 {
constructor(private _service2: Service2) {
this.checkName();
}
checkName(): void {
const name = this._service2.getName();
if (!name) {
this._router.navigate(['bad-name-page']);
}
}
}
Возвращая 'test' из spyOn (service2, 'getName'), я ожидаю, что тест не пройдёт, потому что он должен переходить на страницу с плохим именем, когда имя не определено.Я добавил логирование до и после оператора if, и все выглядит нормально;name заполняется словом «test», и журналы внутри оператора if не выполняются, когда это имя действительно.
Однако, если я удалю this.checkName () из конструктора, этот тест завершится неудачно, как я и ожидал.
Почему использование this.checkName () в конструкторе вызывает проблемы с моими тестами и каков наилучший способ написания тестов методами конструктора?
Спасибо!