Я сейчас пытаюсь написать тесты на ионные. Мои автоматически созданные тесты заканчиваются до выполнения асинхронного обратного вызова. Как я могу определить, когда обратные вызовы в конструкторах завершены, чтобы я мог выполнить свои проверки?
Обещания не являются опцией для этого, потому что TestBed.createComponent уже возвращает фиксатор и не может вернуть обещание.
Если бы я реализовал обратный вызов done (), мне пришлось бы изменить сигнатуру конструктора, чтобы включить обратный вызов, и это выглядит как плохая практика.
Тестовый файл:
it('should initialize the app', () => {
const fixture = TestBed.createComponent(AppComponent);
fixture.detectChanges();
of(expect(platformSpy.ready).toHaveBeenCalled()).subscribe(async () => {
expect(statusBarSpy.styleDefault).toHaveBeenCalled();
expect(splashScreenSpy.hide).toHaveBeenCalled();
console.log("Tests have completed execution!");
return of(null)
});
});
Машинописание компонентов:
constructor(...) {
this.initializeApp();
}
initializeApp() {
// Check session already setup
this.platform.ready()
.then(() => this.store.dispatch(new CheckSessionAction(this)))
.then(() => {
/** StatusBar and SplashScreen is only for Mobile Devices */
console.log("isMobileDevice: " + this.helper.isMobileDevice());
if (this.helper.isMobileDevice()) {
this.statusBar.styleDefault();
this.splashScreen.hide();
}
console.log("Initialization has completed execution");
});
}
Файл console.logs печатается в следующем порядке:
Испытания завершены
isMobileDevice: true
Инициализация завершила выполнение