Skip to content

Commit 3e73f55

Browse files
committed
chore: Wait an animation frame before advancing fake timers
1 parent e09c263 commit 3e73f55

File tree

2 files changed

+19
-16
lines changed

2 files changed

+19
-16
lines changed

src/components/carousel/carousel.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -792,9 +792,8 @@ describe('Carousel', () => {
792792
it('should pause when focusing an interactive element - issue #1731', async () => {
793793
carousel.interval = 200;
794794
await elementUpdated(carousel);
795+
await nextFrame();
795796

796-
// Flush microtasks to ensure property watcher has completed
797-
await vi.advanceTimersByTimeAsync(0);
798797
await vi.advanceTimersByTimeAsync(199);
799798

800799
expect(carousel.isPlaying).to.be.true;
@@ -804,6 +803,7 @@ describe('Carousel', () => {
804803
// hover carousel
805804
carousel.dispatchEvent(new PointerEvent('pointerenter'));
806805
await elementUpdated(carousel);
806+
await nextFrame();
807807

808808
await vi.advanceTimersByTimeAsync(1);
809809

src/components/tooltip/tooltip.spec.ts

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -147,10 +147,10 @@ describe('Tooltip', () => {
147147

148148
describe('Properties Tests', () => {
149149
beforeEach(async () => {
150-
clock = vi.useFakeTimers({ toFake: ['setTimeout'] });
151150
const container = await fixture(createTooltipWithTarget());
152151
tooltip = container.querySelector(IgcTooltipComponent.tagName)!;
153152
anchor = container.querySelector('button')!;
153+
clock = vi.useFakeTimers({ toFake: ['setTimeout'] });
154154
});
155155

156156
afterEach(() => {
@@ -415,6 +415,7 @@ describe('Tooltip', () => {
415415
tooltip.sticky = true;
416416
tooltip.open = true;
417417
await elementUpdated(tooltip);
418+
await nextFrame();
418419

419420
expect(tooltip.open).to.be.true;
420421

@@ -426,8 +427,8 @@ describe('Tooltip', () => {
426427
})
427428
);
428429

429-
// Flush microtasks to ensure async event handler completes
430-
await clock.advanceTimersByTimeAsync(0);
430+
// Wait for event handler to process
431+
await nextFrame();
431432
await clock.advanceTimersByTimeAsync(endTick(DEFAULT_HIDE_DELAY));
432433
await hideComplete();
433434
expect(tooltip.open).to.be.false;
@@ -436,10 +437,10 @@ describe('Tooltip', () => {
436437

437438
describe('Methods` Tests', () => {
438439
beforeEach(async () => {
439-
clock = vi.useFakeTimers({ toFake: ['setTimeout'] });
440440
const container = await fixture(createTooltipWithTarget());
441441
tooltip = container.querySelector(IgcTooltipComponent.tagName)!;
442442
anchor = container.querySelector('button')!;
443+
clock = vi.useFakeTimers({ toFake: ['setTimeout'] });
443444
});
444445

445446
afterEach(() => {
@@ -559,8 +560,8 @@ describe('Tooltip', () => {
559560
tooltip.parentElement!.querySelectorAll('button')
560561
);
561562

562-
// Flush any pending microtasks before showing
563-
await clock.advanceTimersByTimeAsync(0);
563+
// Wait for component to be fully initialized
564+
await nextFrame();
564565

565566
const result = await tooltip.show(transientAnchor);
566567
expect(result).to.be.true;
@@ -569,8 +570,7 @@ describe('Tooltip', () => {
569570

570571
simulatePointerEnter(defaultAnchor);
571572
// Trigger on the initial default anchor. Tooltip must be hidden.
572-
// Flush microtasks to ensure async event handler completes
573-
await clock.advanceTimersByTimeAsync(0);
573+
await nextFrame();
574574
expect(tooltip.open).to.be.false;
575575
await clock.advanceTimersByTimeAsync(DEFAULT_SHOW_DELAY);
576576
await showComplete();
@@ -583,10 +583,10 @@ describe('Tooltip', () => {
583583

584584
describe('Behaviors', () => {
585585
beforeEach(async () => {
586-
clock = vi.useFakeTimers({ toFake: ['setTimeout', 'clearTimeout'] });
587586
const container = await fixture(createTooltipWithTarget());
588587
anchor = container.querySelector('button')!;
589588
tooltip = container.querySelector(IgcTooltipComponent.tagName)!;
589+
clock = vi.useFakeTimers({ toFake: ['setTimeout', 'clearTimeout'] });
590590
});
591591

592592
afterEach(() => {
@@ -749,11 +749,11 @@ describe('Tooltip', () => {
749749
let spy: MockInstance;
750750

751751
beforeEach(async () => {
752-
clock = vi.useFakeTimers({ toFake: ['setTimeout'] });
753752
const container = await fixture(createTooltipWithTarget());
754753
tooltip = container.querySelector(IgcTooltipComponent.tagName)!;
755754
anchor = container.querySelector('button')!;
756755
spy = vi.spyOn(tooltip, 'emitEvent');
756+
clock = vi.useFakeTimers({ toFake: ['setTimeout'] });
757757
});
758758

759759
afterEach(() => {
@@ -792,13 +792,16 @@ describe('Tooltip', () => {
792792
});
793793

794794
it('can cancel -ing events', async () => {
795+
// Wait for component to be fully initialized
796+
await nextFrame();
797+
795798
tooltip.addEventListener('igcOpening', (e) => e.preventDefault(), {
796799
once: true,
797800
});
798801

799802
simulatePointerEnter(anchor);
800-
// Flush microtasks to ensure the async event handler completes before advancing timers
801-
await clock.advanceTimersByTimeAsync(0);
803+
// Wait for event handler to process
804+
await nextFrame();
802805
await clock.advanceTimersByTimeAsync(DEFAULT_SHOW_DELAY);
803806
await showComplete(tooltip);
804807

@@ -817,8 +820,8 @@ describe('Tooltip', () => {
817820
});
818821

819822
simulatePointerLeave(anchor);
820-
// Flush microtasks to ensure the async event handler completes before advancing timers
821-
await clock.advanceTimersByTimeAsync(0);
823+
// Wait for event handler to process
824+
await nextFrame();
822825
await clock.advanceTimersByTimeAsync(endTick(DEFAULT_HIDE_DELAY));
823826
await hideComplete(tooltip);
824827

0 commit comments

Comments
 (0)