У меня проблемы с тестированием кода, который использует setInterval.
Моя функция в проверке компонентов, если текущее время находится после заданного времени.
Я ожидаю, что isAfter флаг должен быть ложным при запуске и через 6 секунд должен быть истинным (при 2,3,4 секундах должен быть ложным)
Теперь это все еще ложь.
код компонента
isAfter: boolean;
private interval;
ngOnInit(): void {
const now = new Date();
const time = now.setSeconds(now.getSeconds() + 5);
const future = new Date(time);
this.checkTime(future);
}
private checkTime(time: any): void {
this.interval = setInterval(() => {
const now = new Date();
if (now === time) {
console.log('stop');
this.isAfter = true;
clearInterval(this.interval);
} else {
console.log('next');
this.isAfter = false;
}
}, 1000);
}
}
код спецификации
import { TestBed, async, ComponentFixture, fakeAsync, tick, discardPeriodicTasks } from '@angular/core/testing';
import { AppComponent } from './app.component';
describe('AppComponent', () => {
let component: AppComponent;
let fixture: ComponentFixture<AppComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
AppComponent
],
}).compileComponents();
fixture = TestBed.createComponent(AppComponent);
component = fixture.componentInstance;
}));
it ('should check time', fakeAsync(() => {
fixture.detectChanges();
console.log('isAfter 1', component.isAfter);
tick(3000);
fixture.detectChanges();
console.log('isAfter 3', component.isAfter);
tick(6000);
fixture.detectChanges();
console.log('isAfter 6', component.isAfter);
discardPeriodicTasks();
}));
});