directus
1import { afterAll, beforeAll, expect, test, vi, type MockInstance } from 'vitest';2import { stall } from './stall.js';3
4let performanceNowSpy: MockInstance;5
6beforeAll(() => {7vi.useFakeTimers();8
9// fake timers doesn't fake performance.now(), so this is used to mock it10performanceNowSpy = vi.spyOn(performance, 'now').mockReturnValue(0);11});12
13afterAll(() => {14vi.useRealTimers();15});16
17const STALL_TIME = 100;18
19test('does not stall if elapsed time has already past the stall time', () => {20const startTime = performance.now();21
22// intentionally advance past the stall time first23performanceNowSpy.mockReturnValueOnce(1000);24
25stall(STALL_TIME, startTime);26
27expect(vi.getTimerCount()).toBe(0);28});29
30test('should stall for a set amount of time', () => {31const startTime = performance.now();32
33stall(STALL_TIME, startTime);34
35expect(vi.getTimerCount()).toBe(1);36
37vi.advanceTimersByTime(STALL_TIME);38
39expect(vi.getTimerCount()).toBe(0);40});41