У меня есть компонент с функцией setTimeOut внутри службы. Для написания модульных тестов для этого я использую tick и fakeAsyn c для setTimeOut. Но это не выполняется. даже меня интересует, как мне написать тестовый пример для окна ['MyAirtelAppReact'] внутри условия if.
И я попытался с помощью flushMicrotasks очистит все из микрозадач, которые в данный момент находятся в очереди, но не уверены, так ли это? Как бы я написал модульный тест, чтобы проверить это?
Код компонента:
constructor(
private dataService: DataService,
private loadinSrvc: LoadingService,
private router: Router,
private toastr: ToastrService,
public dialog: MatDialog
){
if (window['MyAirtelAppReact'] !== undefined) {
if (
window['MyAirtelAppReact'] &&
window['MyAirtelAppReact'].getParameters
) {
const deviceInfoString = window['MyAirtelAppReact'].getParameters();
const deviceInfo = JSON.parse(deviceInfoString);
this.dataService.setAppDetails(deviceInfo);
}
} else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {
window['webkit'].messageHandlers.getParameters.postMessage('');
} else {
const deviceInfo = {
channel: 'web',
deviceId: GLOBAL_PROPERTIES.DEVICE_ID,
};
this.dataService.setAppDetails(deviceInfo);
}
this.loadinSrvc.userChangeEvent.subscribe((user) =>
setTimeout(() => {
this.showLoader = {
text: this.loadinSrvc.getLoaderText() || 'Please wait...',
isLoader: user,
};
})
);
this.router.events.subscribe((event: Event) => {
if (event instanceof NavigationEnd) {
this.loadinSrvc.setLoader(false);
}
if (event instanceof NavigationStart) {
this.loadinSrvc.setLoader(true);
}
if (event instanceof NavigationError) {
this.toastr.error('Something went wrong, please retry.');
this.loadinSrvc.setLoader(false);
}
});
}
Spe c Файл:
describe('AppComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
ReactiveFormsModule,
RouterTestingModule,
CommonModule,
HttpClientModule,
ToastrModule.forRoot({
timeOut: 3000,
positionClass: 'toast-bottom-right',
maxOpened: 1,
preventDuplicates: true,
}),
MatDialogModule,
],
declarations: [AppComponent],
providers: [
CommonService,
{ provide: DataService, useClass: MockDataService },
],
}).compileComponents();
}));
// try2
it('should test some asynchronous code', fakeAsync(() => {
const fixture = TestBed.createComponent(AppComponent);
const component = fixture.componentInstance;
fixture.detectChanges();
component.showLoader = { isLoader: false, text: 'Please wait...' };
const testObservable = from(Promise.resolve(true));
let flag = false;
testObservable.subscribe((result) => {
flag = true;
});
flushMicrotasks();
expect(flag).toBe(true); // PASSES
}));
});