Причина, по которой он не был вызван, заключается в том, что метод spyOn
вызывается после создания компонента, то есть после вызова конструктора. Есть несколько способов обойти это:
- Переместите вызов функции на
ngOnInit
hook:
export class MyComponent {
constructor() {}
ngOnInit(): void {
this.getStorageData();
}
getStorageData() {...}
}
И вы просто убедитесь, что вы вызываете spyOn
до вашего первого detectChanges()
. Тогда вы можете оставить тест, как он у вас
Просто инициализируйте компонент, используя
new
и добавьте шпиона к прототипу:
it('should call getStorageData', function() {
spyOn(MyComponent.prototype, 'getStorageData').and.callThrough();
const component = new MyComponent();
expect(MyComponent.prototype.getStorageData).toHaveBeenCalled();
});
Вы должны будете самостоятельно предоставить любых возможных поставщиков конструктора, поскольку внедрение зависимостей не будет работать
Поместите шпиона в
beforeEach
на прототипе
beforeEach(() => {
spyOn(MyComponent.prototype, 'getStorageData').and.callThrough();
fixture = TestBed.createComponent(MyComponent);
component = fixture.componentInstance;
})
it('should create', async(()=> {
fixture.detectChanges();
expect(component).toBeDefined();
expect(MyComponent.prototype.getStorageData).toHaveBeenCalled();
}))
Вы, вероятно, должны рассмотреть возможность изоляции этого теста, чтобы убедиться, что он не шпионит за каждым тестом в этой игре c .