or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

tessl/npm-jest--fake-timers

A comprehensive fake timer implementation for Jest that provides both legacy and modern timer mocking capabilities, enabling developers to control time flow in tests by mocking JavaScript's built-in timer functions.

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/@jest/fake-timers@30.1.x

To install, run

npx @tessl/cli install tessl/npm-jest--fake-timers@30.1.0

0

# Jest Fake Timers

1

2

Jest Fake Timers provides comprehensive timer mocking capabilities for Jest tests, enabling developers to control time flow by replacing JavaScript's built-in timer functions with controllable fake implementations. It offers two complementary approaches: ModernFakeTimers built on @sinonjs/fake-timers for advanced time control, and LegacyFakeTimers for backward compatibility.

3

4

## Package Information

5

6

- **Package Name**: @jest/fake-timers

7

- **Package Type**: npm

8

- **Language**: TypeScript

9

- **Installation**: `npm install @jest/fake-timers`

10

11

## Core Imports

12

13

```typescript

14

import { ModernFakeTimers, LegacyFakeTimers } from "@jest/fake-timers";

15

import type { Config } from "@jest/types";

16

```

17

18

For CommonJS:

19

20

```javascript

21

const { ModernFakeTimers, LegacyFakeTimers } = require("@jest/fake-timers");

22

// TypeScript types are available for TypeScript projects

23

```

24

25

## Basic Usage

26

27

```typescript

28

import { ModernFakeTimers } from "@jest/fake-timers";

29

import { makeProjectConfig } from "@jest/test-utils";

30

31

// Initialize modern fake timers

32

const fakeTimers = new ModernFakeTimers({

33

global: globalThis,

34

config: makeProjectConfig()

35

});

36

37

// Enable fake timers

38

fakeTimers.useFakeTimers();

39

40

// Your test code with timers...

41

setTimeout(() => console.log("Timer executed"), 1000);

42

43

// Advance time by 1 second

44

fakeTimers.advanceTimersByTime(1000);

45

46

// Clean up

47

fakeTimers.useRealTimers();

48

fakeTimers.dispose();

49

```

50

51

## Architecture

52

53

Jest Fake Timers is designed around two main implementations:

54

55

- **ModernFakeTimers**: Built on @sinonjs/fake-timers, providing comprehensive time control including Date mocking, async timer operations, and advanced scheduling features

56

- **LegacyFakeTimers**: Custom Jest implementation for backward compatibility with older Jest configurations, offering precise control over timer execution order

57

58

Both implementations provide:

59

- **Timer Replacement**: Mocks all JavaScript timer APIs (setTimeout, setInterval, etc.)

60

- **Time Control**: Precise advancement of fake time without actual delays

61

- **State Management**: Reset, clear, and query timer states

62

- **Animation Frame Support**: requestAnimationFrame/cancelAnimationFrame mocking

63

- **Process Control**: NextTick and setImmediate handling

64

65

## Capabilities

66

67

### Modern Fake Timers

68

69

Advanced fake timer implementation with comprehensive time control, async operations, and @sinonjs/fake-timers integration.

70

71

```typescript { .api }

72

interface ModernFakeTimersConstructor {

73

new (options: {

74

global: typeof globalThis;

75

config: Config.ProjectConfig;

76

}): ModernFakeTimers;

77

}

78

79

interface ModernFakeTimers {

80

useFakeTimers(fakeTimersConfig?: Config.FakeTimersConfig): void;

81

useRealTimers(): void;

82

runAllTimers(): void;

83

runAllTimersAsync(): Promise<void>;

84

runOnlyPendingTimers(): void;

85

runOnlyPendingTimersAsync(): Promise<void>;

86

advanceTimersByTime(msToRun: number): void;

87

advanceTimersByTimeAsync(msToRun: number): Promise<void>;

88

advanceTimersToNextTimer(steps?: number): void;

89

advanceTimersToNextTimerAsync(steps?: number): Promise<void>;

90

advanceTimersToNextFrame(): void;

91

runAllTicks(): void;

92

setSystemTime(now?: number | Date): void;

93

getRealSystemTime(): number;

94

now(): number;

95

reset(): void;

96

clearAllTimers(): void;

97

getTimerCount(): number;

98

dispose(): void;

99

}

100

```

101

102

[Modern Fake Timers](./modern-fake-timers.md)

103

104

### Legacy Fake Timers

105

106

Backward-compatible fake timer implementation with custom Jest timer control and precise execution ordering.

107

108

```typescript { .api }

109

interface LegacyFakeTimersConstructor {

110

new <TimerRef = unknown>(options: {

111

global: typeof globalThis;

112

moduleMocker: ModuleMocker;

113

timerConfig: TimerConfig<TimerRef>;

114

config: StackTraceConfig;

115

maxLoops?: number;

116

}): LegacyFakeTimers<TimerRef>;

117

}

118

119

interface LegacyFakeTimers<TimerRef = unknown> {

120

useFakeTimers(): void;

121

useRealTimers(): void;

122

runWithRealTimers(cb: Callback): void;

123

runAllTimers(): void;

124

runOnlyPendingTimers(): void;

125

runAllTicks(): void;

126

runAllImmediates(): void;

127

advanceTimersByTime(msToRun: number): void;

128

advanceTimersToNextTimer(steps?: number): void;

129

reset(): void;

130

clearAllTimers(): void;

131

now(): number;

132

getTimerCount(): number;

133

dispose(): void;

134

}

135

```

136

137

[Legacy Fake Timers](./legacy-fake-timers.md)

138

139

## Configuration Types

140

141

```typescript { .api }

142

interface Config.FakeTimersConfig {

143

/** Auto-advance timers by specified milliseconds */

144

advanceTimers?: boolean | number;

145

/** APIs to exclude from faking */

146

doNotFake?: Array<FakeableAPI>;

147

/** Initial system time for fake timers */

148

now?: number | Date;

149

/** Maximum recursive timer limit */

150

timerLimit?: number;

151

/** Must be false for modern timers */

152

legacyFakeTimers?: false;

153

}

154

155

type FakeableAPI =

156

| 'Date'

157

| 'hrtime'

158

| 'nextTick'

159

| 'performance'

160

| 'queueMicrotask'

161

| 'requestAnimationFrame'

162

| 'cancelAnimationFrame'

163

| 'requestIdleCallback'

164

| 'cancelIdleCallback'

165

| 'setImmediate'

166

| 'clearImmediate'

167

| 'setInterval'

168

| 'clearInterval'

169

| 'setTimeout'

170

| 'clearTimeout';

171

172

interface TimerConfig<Ref> {

173

/** Convert timer ID to reference */

174

idToRef: (id: number) => Ref;

175

/** Convert reference to timer ID */

176

refToId: (ref: Ref) => number | void;

177

}

178

179

type Callback = (...args: Array<unknown>) => void;

180

```