Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80657 views
1
/**
2
* Copyright (c) 2014, Facebook, Inc. All rights reserved.
3
*
4
* This source code is licensed under the BSD-style license found in the
5
* LICENSE file in the root directory of this source tree. An additional grant
6
* of patent rights can be found in the PATENTS file in the same directory.
7
*/
8
'use strict';
9
10
require('mock-modules').autoMockOff();
11
12
describe('FakeTimers', function() {
13
var FakeTimers;
14
15
beforeEach(function() {
16
FakeTimers = require('../FakeTimers');
17
});
18
19
describe('construction', function() {
20
/* jshint nonew:false */
21
it('installs setTimeout mock', function() {
22
var global = {};
23
new FakeTimers(global);
24
expect(global.setTimeout).not.toBe(undefined);
25
});
26
27
it('installs clearTimeout mock', function() {
28
var global = {};
29
new FakeTimers(global);
30
expect(global.clearTimeout).not.toBe(undefined);
31
});
32
33
it('installs setInterval mock', function() {
34
var global = {};
35
new FakeTimers(global);
36
expect(global.setInterval).not.toBe(undefined);
37
});
38
39
it('installs clearInterval mock', function() {
40
var global = {};
41
new FakeTimers(global);
42
expect(global.clearInterval).not.toBe(undefined);
43
});
44
45
it('mocks process.nextTick if on exists on global', function() {
46
var origNextTick = function() {};
47
var global = {
48
process: {
49
nextTick: origNextTick
50
}
51
};
52
new FakeTimers(global);
53
expect(global.process.nextTick).not.toBe(origNextTick);
54
});
55
56
it('doesn\'t mock process.nextTick if real impl isnt present', function() {
57
var global = {};
58
new FakeTimers(global);
59
expect(global.process).toBe(undefined);
60
});
61
62
it('mocks setImmediate if it exists on global', function() {
63
var origSetImmediate = function() {};
64
var global = {
65
setImmediate: origSetImmediate
66
};
67
new FakeTimers(global);
68
expect(global.setImmediate).not.toBe(origSetImmediate);
69
});
70
71
it('mocks clearImmediate if setImmediate is on global', function() {
72
var origSetImmediate = function() {};
73
var origClearImmediate = function(){};
74
var global = {
75
setImmediate: origSetImmediate,
76
clearImmediate: origClearImmediate
77
};
78
new FakeTimers(global);
79
expect(global.clearImmediate).not.toBe(origClearImmediate);
80
});
81
82
it('doesn\'t mock setImmediate if real impl isnt present', function() {
83
var global = {};
84
new FakeTimers(global);
85
expect(global.setImmediate).toBe(undefined);
86
});
87
88
it('doesnt mock clearImmediate if real immediate isnt present', function() {
89
var global = {};
90
new FakeTimers(global);
91
expect(global.clearImmediate).toBe(undefined);
92
});
93
});
94
95
describe('runAllTicks', function() {
96
it('runs all ticks, in order', function() {
97
var global = {
98
process: {
99
nextTick: function() {}
100
}
101
};
102
103
var fakeTimers = new FakeTimers(global);
104
105
var runOrder = [];
106
var mock1 = jest.genMockFn().mockImpl(function() {
107
runOrder.push('mock1');
108
});
109
var mock2 = jest.genMockFn().mockImpl(function() {
110
runOrder.push('mock2');
111
});
112
113
global.process.nextTick(mock1);
114
global.process.nextTick(mock2);
115
116
expect(mock1.mock.calls.length).toBe(0);
117
expect(mock2.mock.calls.length).toBe(0);
118
119
fakeTimers.runAllTicks();
120
121
expect(mock1.mock.calls.length).toBe(1);
122
expect(mock2.mock.calls.length).toBe(1);
123
expect(runOrder).toEqual(['mock1', 'mock2']);
124
});
125
126
it('does nothing when no ticks have been scheduled', function() {
127
var nextTick = jest.genMockFn();
128
var global = {
129
process: {
130
nextTick: nextTick
131
}
132
};
133
134
var fakeTimers = new FakeTimers(global);
135
fakeTimers.runAllTicks();
136
137
expect(nextTick.mock.calls.length).toBe(0);
138
});
139
140
it('only runs a scheduled callback once', function() {
141
var global = {
142
process: {
143
nextTick: function() {}
144
}
145
};
146
147
var fakeTimers = new FakeTimers(global);
148
149
var mock1 = jest.genMockFn();
150
global.process.nextTick(mock1);
151
expect(mock1.mock.calls.length).toBe(0);
152
153
fakeTimers.runAllTicks();
154
expect(mock1.mock.calls.length).toBe(1);
155
156
fakeTimers.runAllTicks();
157
expect(mock1.mock.calls.length).toBe(1);
158
});
159
160
it('cancels a callback even from native nextTick', function() {
161
var nativeNextTick = jest.genMockFn();
162
163
var global = {
164
process: {
165
nextTick: nativeNextTick
166
}
167
};
168
169
var fakeTimers = new FakeTimers(global);
170
171
var mock1 = jest.genMockFn();
172
global.process.nextTick(mock1);
173
fakeTimers.runAllTicks();
174
expect(mock1.mock.calls.length).toBe(1);
175
expect(nativeNextTick.mock.calls.length).toBe(1);
176
177
// Now imagine we fast forward to the next real tick. We need to be sure
178
// that native nextTick doesn't try to run the callback again
179
nativeNextTick.mock.calls[0][0]();
180
expect(mock1.mock.calls.length).toBe(1);
181
});
182
183
it('cancels a callback even from native setImmediate', function() {
184
var nativeSetImmediate = jest.genMockFn();
185
186
var global = {
187
setImmediate: nativeSetImmediate
188
};
189
190
var fakeTimers = new FakeTimers(global);
191
192
var mock1 = jest.genMockFn();
193
global.setImmediate(mock1);
194
fakeTimers.runAllImmediates();
195
expect(mock1.mock.calls.length).toBe(1);
196
expect(nativeSetImmediate.mock.calls.length).toBe(1);
197
198
// ensure that native setImmediate doesn't try to run the callback again
199
nativeSetImmediate.mock.calls[0][0]();
200
expect(mock1.mock.calls.length).toBe(1);
201
});
202
203
it('doesnt run a tick callback if native nextTick already did', function() {
204
var nativeNextTick = jest.genMockFn();
205
206
var global = {
207
process: {
208
nextTick: nativeNextTick
209
}
210
};
211
212
var fakeTimers = new FakeTimers(global);
213
214
var mock1 = jest.genMockFn();
215
global.process.nextTick(mock1);
216
217
// Emulate native nextTick running...
218
nativeNextTick.mock.calls[0][0]();
219
expect(mock1.mock.calls.length).toBe(1);
220
221
// Ensure runAllTicks() doesn't run the callback again
222
fakeTimers.runAllTicks();
223
expect(mock1.mock.calls.length).toBe(1);
224
});
225
226
it('doesnt run immediate if native setImmediate already did', function() {
227
var nativeSetImmediate = jest.genMockFn();
228
229
var global = {
230
setImmediate: nativeSetImmediate
231
};
232
233
var fakeTimers = new FakeTimers(global);
234
235
var mock1 = jest.genMockFn();
236
global.setImmediate(mock1);
237
238
// Emulate native setImmediate running...
239
nativeSetImmediate.mock.calls[0][0]();
240
expect(mock1.mock.calls.length).toBe(1);
241
242
// Ensure runAllTicks() doesn't run the callback again
243
fakeTimers.runAllImmediates();
244
expect(mock1.mock.calls.length).toBe(1);
245
});
246
247
it('native doesnt run immediate if fake already did', function() {
248
var nativeSetImmediate = jest.genMockFn();
249
250
var global = {
251
setImmediate: nativeSetImmediate
252
};
253
254
var fakeTimers = new FakeTimers(global);
255
256
var mock1 = jest.genMockFn();
257
global.setImmediate(mock1);
258
259
//run all immediates now
260
fakeTimers.runAllImmediates();
261
expect(mock1.mock.calls.length).toBe(1);
262
263
// Emulate native setImmediate running ensuring it doesn't re-run
264
nativeSetImmediate.mock.calls[0][0]();
265
266
expect(mock1.mock.calls.length).toBe(1);
267
});
268
269
it('throws before allowing infinite recursion', function() {
270
var global = {
271
process: {
272
nextTick: function() {}
273
}
274
};
275
276
var fakeTimers = new FakeTimers(global, 100);
277
278
global.process.nextTick(function infinitelyRecursingCallback() {
279
global.process.nextTick(infinitelyRecursingCallback);
280
});
281
282
expect(function() {
283
fakeTimers.runAllTicks();
284
}).toThrow(
285
'Ran 100 ticks, and there are still more! Assuming we\'ve hit an ' +
286
'infinite recursion and bailing out...'
287
);
288
});
289
});
290
291
describe('runAllTimers', function() {
292
it('runs all timers in order', function() {
293
var global = {};
294
var fakeTimers = new FakeTimers(global);
295
296
var runOrder = [];
297
var mock1 = jest.genMockFn().mockImpl(function() {
298
runOrder.push('mock1');
299
});
300
var mock2 = jest.genMockFn().mockImpl(function() {
301
runOrder.push('mock2');
302
});
303
var mock3 = jest.genMockFn().mockImpl(function() {
304
runOrder.push('mock3');
305
});
306
var mock4 = jest.genMockFn().mockImpl(function() {
307
runOrder.push('mock4');
308
});
309
310
global.setTimeout(mock1, 100);
311
global.setTimeout(mock2, 0);
312
global.setTimeout(mock3, 0);
313
var intervalHandler = global.setInterval(function() {
314
mock4();
315
global.clearInterval(intervalHandler);
316
}, 200);
317
318
fakeTimers.runAllTimers();
319
expect(runOrder).toEqual(['mock2', 'mock3', 'mock1', 'mock4']);
320
});
321
322
it('does nothing when no timers have been scheduled', function() {
323
var nativeSetTimeout = jest.genMockFn();
324
var global = {
325
setTimeout: nativeSetTimeout
326
};
327
328
var fakeTimers = new FakeTimers(global);
329
fakeTimers.runAllTimers();
330
});
331
332
it('only runs a setTimeout callback once (ever)', function() {
333
var global = {};
334
var fakeTimers = new FakeTimers(global);
335
336
var fn = jest.genMockFn();
337
global.setTimeout(fn, 0);
338
expect(fn.mock.calls.length).toBe(0);
339
340
fakeTimers.runAllTimers();
341
expect(fn.mock.calls.length).toBe(1);
342
343
fakeTimers.runAllTimers();
344
expect(fn.mock.calls.length).toBe(1);
345
});
346
347
it('runs callbacks with arguments after the interval', function() {
348
var global = {};
349
var fakeTimers = new FakeTimers(global);
350
351
var fn = jest.genMockFn();
352
global.setTimeout(fn, 0, 'mockArg1', 'mockArg2');
353
354
fakeTimers.runAllTimers();
355
expect(fn.mock.calls).toEqual([
356
['mockArg1', 'mockArg2']
357
]);
358
});
359
360
it('doesnt pass the callback to native setTimeout', function() {
361
var nativeSetTimeout = jest.genMockFn();
362
363
var global = {
364
setTimeout: nativeSetTimeout
365
};
366
367
var fakeTimers = new FakeTimers(global);
368
369
var mock1 = jest.genMockFn();
370
global.setTimeout(mock1, 0);
371
372
fakeTimers.runAllTimers();
373
expect(mock1.mock.calls.length).toBe(1);
374
expect(nativeSetTimeout.mock.calls.length).toBe(0);
375
});
376
377
it('throws before allowing infinite recursion', function() {
378
var global = {};
379
var fakeTimers = new FakeTimers(global, 100);
380
381
global.setTimeout(function infinitelyRecursingCallback() {
382
global.setTimeout(infinitelyRecursingCallback, 0);
383
}, 0);
384
385
expect(function() {
386
fakeTimers.runAllTimers();
387
}).toThrow(
388
'Ran 100 timers, and there are still more! Assuming we\'ve hit an ' +
389
'infinite recursion and bailing out...'
390
);
391
});
392
});
393
394
describe('runTimersToTime', function() {
395
it('runs timers in order', function() {
396
var global = {};
397
var fakeTimers = new FakeTimers(global);
398
399
var runOrder = [];
400
var mock1 = jest.genMockFn().mockImpl(function() {
401
runOrder.push('mock1');
402
});
403
var mock2 = jest.genMockFn().mockImpl(function() {
404
runOrder.push('mock2');
405
});
406
var mock3 = jest.genMockFn().mockImpl(function() {
407
runOrder.push('mock3');
408
});
409
var mock4 = jest.genMockFn().mockImpl(function() {
410
runOrder.push('mock4');
411
});
412
413
global.setTimeout(mock1, 100);
414
global.setTimeout(mock2, 0);
415
global.setTimeout(mock3, 0);
416
global.setInterval(function() {
417
mock4();
418
}, 200);
419
420
// Move forward to t=50
421
fakeTimers.runTimersToTime(50);
422
expect(runOrder).toEqual(['mock2', 'mock3']);
423
424
// Move forward to t=60
425
fakeTimers.runTimersToTime(10);
426
expect(runOrder).toEqual(['mock2', 'mock3']);
427
428
// Move forward to t=100
429
fakeTimers.runTimersToTime(40);
430
expect(runOrder).toEqual(['mock2', 'mock3', 'mock1']);
431
432
// Move forward to t=200
433
fakeTimers.runTimersToTime(100);
434
expect(runOrder).toEqual(['mock2', 'mock3', 'mock1', 'mock4']);
435
436
// Move forward to t=400
437
fakeTimers.runTimersToTime(200);
438
expect(runOrder).toEqual(['mock2', 'mock3', 'mock1', 'mock4', 'mock4']);
439
});
440
441
it('does nothing when no timers have been scheduled', function() {
442
var global = {};
443
var fakeTimers = new FakeTimers(global);
444
445
fakeTimers.runTimersToTime(100);
446
});
447
448
it('throws before allowing infinite recursion', function() {
449
var global = {};
450
var fakeTimers = new FakeTimers(global, 100);
451
452
global.setTimeout(function infinitelyRecursingCallback() {
453
global.setTimeout(infinitelyRecursingCallback, 0);
454
}, 0);
455
456
expect(function() {
457
fakeTimers.runTimersToTime(50);
458
}).toThrow(
459
'Ran 100 timers, and there are still more! Assuming we\'ve hit an ' +
460
'infinite recursion and bailing out...'
461
);
462
});
463
});
464
465
describe('reset', function() {
466
it('resets all pending setTimeouts', function() {
467
var global = {};
468
var fakeTimers = new FakeTimers(global);
469
470
var mock1 = jest.genMockFn();
471
global.setTimeout(mock1, 100);
472
473
fakeTimers.reset();
474
fakeTimers.runAllTimers();
475
expect(mock1.mock.calls.length).toBe(0);
476
});
477
478
it('resets all pending setIntervals', function() {
479
var global = {};
480
var fakeTimers = new FakeTimers(global);
481
482
var mock1 = jest.genMockFn();
483
global.setInterval(mock1, 200);
484
485
fakeTimers.reset();
486
fakeTimers.runAllTimers();
487
expect(mock1.mock.calls.length).toBe(0);
488
});
489
490
it('resets all pending ticks callbacks & immediates', function() {
491
var global = {
492
setImmediate: function() {},
493
process: {
494
nextTick: function() {}
495
}
496
};
497
var fakeTimers = new FakeTimers(global);
498
499
var mock1 = jest.genMockFn();
500
global.process.nextTick(mock1);
501
global.setImmediate(mock1);
502
503
fakeTimers.reset();
504
fakeTimers.runAllTicks();
505
fakeTimers.runAllImmediates();
506
expect(mock1.mock.calls.length).toBe(0);
507
});
508
509
it('resets current runTimersToTime time cursor', function() {
510
var global = {};
511
var fakeTimers = new FakeTimers(global);
512
513
var mock1 = jest.genMockFn();
514
global.setTimeout(mock1, 100);
515
fakeTimers.runTimersToTime(50);
516
517
fakeTimers.reset();
518
global.setTimeout(mock1, 100);
519
520
fakeTimers.runTimersToTime(50);
521
expect(mock1.mock.calls.length).toBe(0);
522
});
523
});
524
525
describe('runOnlyPendingTimers', function() {
526
it('runs all timers in order', function() {
527
var global = {};
528
var fakeTimers = new FakeTimers(global);
529
530
var runOrder = [];
531
532
global.setTimeout(function cb() {
533
runOrder.push('mock1');
534
global.setTimeout(cb, 100);
535
}, 100);
536
537
global.setTimeout(function cb() {
538
runOrder.push('mock2');
539
global.setTimeout(cb, 0);
540
}, 0);
541
542
global.setInterval(function() {
543
runOrder.push('mock3');
544
}, 200);
545
546
fakeTimers.runOnlyPendingTimers();
547
expect(runOrder).toEqual([
548
'mock2',
549
'mock1',
550
'mock3'
551
]);
552
553
fakeTimers.runOnlyPendingTimers();
554
expect(runOrder).toEqual([
555
'mock2',
556
'mock1',
557
'mock3',
558
559
'mock2',
560
'mock1',
561
'mock3'
562
]);
563
});
564
});
565
566
describe('runWithRealTimers', function() {
567
it('executes callback with native timers', function() {
568
var nativeClearInterval = jest.genMockFn();
569
var nativeClearTimeout = jest.genMockFn();
570
var nativeSetInterval = jest.genMockFn();
571
var nativeSetTimeout = jest.genMockFn();
572
573
var global = {
574
clearInterval: nativeClearInterval,
575
clearTimeout: nativeClearTimeout,
576
setInterval: nativeSetInterval,
577
setTimeout: nativeSetTimeout
578
};
579
var fakeTimers = new FakeTimers(global);
580
581
// clearInterval()
582
fakeTimers.runWithRealTimers(function() {
583
global.clearInterval();
584
});
585
expect(nativeClearInterval.mock.calls.length).toBe(1);
586
expect(global.clearInterval.mock.calls.length).toBe(0);
587
588
// clearTimeout()
589
fakeTimers.runWithRealTimers(function() {
590
global.clearTimeout();
591
});
592
expect(nativeClearTimeout.mock.calls.length).toBe(1);
593
expect(global.clearTimeout.mock.calls.length).toBe(0);
594
595
// setInterval()
596
fakeTimers.runWithRealTimers(function() {
597
global.setInterval();
598
});
599
expect(nativeSetInterval.mock.calls.length).toBe(1);
600
expect(global.setInterval.mock.calls.length).toBe(0);
601
602
// setTimeout()
603
fakeTimers.runWithRealTimers(function() {
604
global.setTimeout();
605
});
606
expect(nativeSetTimeout.mock.calls.length).toBe(1);
607
expect(global.setTimeout.mock.calls.length).toBe(0);
608
});
609
610
it('resets mock timers after executing callback', function() {
611
var nativeClearInterval = jest.genMockFn();
612
var nativeClearTimeout = jest.genMockFn();
613
var nativeSetInterval = jest.genMockFn();
614
var nativeSetTimeout = jest.genMockFn();
615
616
617
var global = {
618
clearInterval: nativeClearInterval,
619
clearTimeout: nativeClearTimeout,
620
setInterval: nativeSetInterval,
621
setTimeout: nativeSetTimeout
622
};
623
var fakeTimers = new FakeTimers(global);
624
625
// clearInterval()
626
fakeTimers.runWithRealTimers(function() {
627
global.clearInterval();
628
});
629
expect(nativeClearInterval.mock.calls.length).toBe(1);
630
expect(global.clearInterval.mock.calls.length).toBe(0);
631
632
global.clearInterval();
633
expect(nativeClearInterval.mock.calls.length).toBe(1);
634
expect(global.clearInterval.mock.calls.length).toBe(1);
635
636
// clearTimeout()
637
fakeTimers.runWithRealTimers(function() {
638
global.clearTimeout();
639
});
640
expect(nativeClearTimeout.mock.calls.length).toBe(1);
641
expect(global.clearTimeout.mock.calls.length).toBe(0);
642
643
global.clearTimeout();
644
expect(nativeClearTimeout.mock.calls.length).toBe(1);
645
expect(global.clearTimeout.mock.calls.length).toBe(1);
646
647
// setInterval()
648
fakeTimers.runWithRealTimers(function() {
649
global.setInterval();
650
});
651
expect(nativeSetInterval.mock.calls.length).toBe(1);
652
expect(global.setInterval.mock.calls.length).toBe(0);
653
654
global.setInterval();
655
expect(nativeSetInterval.mock.calls.length).toBe(1);
656
expect(global.setInterval.mock.calls.length).toBe(1);
657
658
// setTimeout()
659
fakeTimers.runWithRealTimers(function() {
660
global.setTimeout();
661
});
662
expect(nativeSetTimeout.mock.calls.length).toBe(1);
663
expect(global.setTimeout.mock.calls.length).toBe(0);
664
665
global.setTimeout();
666
expect(nativeSetTimeout.mock.calls.length).toBe(1);
667
expect(global.setTimeout.mock.calls.length).toBe(1);
668
});
669
670
it('resets mock timer functions even if callback throws', function() {
671
var nativeSetTimeout = jest.genMockFn();
672
var global = {setTimeout: nativeSetTimeout};
673
var fakeTimers = new FakeTimers(global);
674
675
expect(function() {
676
fakeTimers.runWithRealTimers(function() {
677
global.setTimeout();
678
throw new Error('test');
679
});
680
}).toThrow('test');
681
expect(nativeSetTimeout.mock.calls.length).toBe(1);
682
expect(global.setTimeout.mock.calls.length).toBe(0);
683
684
global.setTimeout();
685
expect(nativeSetTimeout.mock.calls.length).toBe(1);
686
expect(global.setTimeout.mock.calls.length).toBe(1);
687
});
688
});
689
690
describe('useRealTimers', function() {
691
it('resets native timer APIs', function() {
692
var nativeSetTimeout = jest.genMockFn();
693
var nativeSetInterval = jest.genMockFn();
694
var nativeClearTimeout = jest.genMockFn();
695
var nativeClearInterval = jest.genMockFn();
696
697
var global = {
698
setTimeout: nativeSetTimeout,
699
setInterval: nativeSetInterval,
700
clearTimeout: nativeClearTimeout,
701
clearInterval: nativeClearInterval
702
};
703
var fakeTimers = new FakeTimers(global);
704
705
// Ensure that fakeTimers has overridden the native timer APIs
706
// (because if it didn't, this test might pass when it shouldn't)
707
expect(global.setTimeout).not.toBe(nativeSetTimeout);
708
expect(global.setInterval).not.toBe(nativeSetInterval);
709
expect(global.clearTimeout).not.toBe(nativeClearTimeout);
710
expect(global.clearInterval).not.toBe(nativeClearInterval);
711
712
fakeTimers.useRealTimers();
713
714
expect(global.setTimeout).toBe(nativeSetTimeout);
715
expect(global.setInterval).toBe(nativeSetInterval);
716
expect(global.clearTimeout).toBe(nativeClearTimeout);
717
expect(global.clearInterval).toBe(nativeClearInterval);
718
});
719
720
it('resets native process.nextTick when present', function() {
721
var nativeProcessNextTick = jest.genMockFn();
722
723
var global = {
724
process: {nextTick: nativeProcessNextTick}
725
};
726
var fakeTimers = new FakeTimers(global);
727
728
// Ensure that fakeTimers has overridden the native timer APIs
729
// (because if it didn't, this test might pass when it shouldn't)
730
expect(global.process.nextTick).not.toBe(nativeProcessNextTick);
731
732
fakeTimers.useRealTimers();
733
734
expect(global.process.nextTick).toBe(nativeProcessNextTick);
735
});
736
737
it('resets native setImmediate when present', function() {
738
var nativeSetImmediate = jest.genMockFn();
739
var nativeClearImmediate = jest.genMockFn();
740
741
var global = {
742
setImmediate: nativeSetImmediate,
743
clearImmediate: nativeClearImmediate
744
};
745
var fakeTimers = new FakeTimers(global);
746
747
// Ensure that fakeTimers has overridden the native timer APIs
748
// (because if it didn't, this test might pass when it shouldn't)
749
expect(global.setImmediate).not.toBe(nativeSetImmediate);
750
expect(global.clearImmediate).not.toBe(nativeClearImmediate);
751
752
fakeTimers.useRealTimers();
753
754
expect(global.setImmediate).toBe(nativeSetImmediate);
755
expect(global.clearImmediate).toBe(nativeClearImmediate);
756
});
757
});
758
759
describe('useFakeTimers', function() {
760
it('resets mock timer APIs', function() {
761
var nativeSetTimeout = jest.genMockFn();
762
var nativeSetInterval = jest.genMockFn();
763
var nativeClearTimeout = jest.genMockFn();
764
var nativeClearInterval = jest.genMockFn();
765
766
var global = {
767
setTimeout: nativeSetTimeout,
768
setInterval: nativeSetInterval,
769
clearTimeout: nativeClearTimeout,
770
clearInterval: nativeClearInterval
771
};
772
var fakeTimers = new FakeTimers(global);
773
fakeTimers.useRealTimers();
774
775
// Ensure that the real timers are installed at this point
776
// (because if they aren't, this test might pass when it shouldn't)
777
expect(global.setTimeout).toBe(nativeSetTimeout);
778
expect(global.setInterval).toBe(nativeSetInterval);
779
expect(global.clearTimeout).toBe(nativeClearTimeout);
780
expect(global.clearInterval).toBe(nativeClearInterval);
781
782
fakeTimers.useFakeTimers();
783
784
expect(global.setTimeout).not.toBe(nativeSetTimeout);
785
expect(global.setInterval).not.toBe(nativeSetInterval);
786
expect(global.clearTimeout).not.toBe(nativeClearTimeout);
787
expect(global.clearInterval).not.toBe(nativeClearInterval);
788
});
789
790
it('resets mock process.nextTick when present', function() {
791
var nativeProcessNextTick = jest.genMockFn();
792
793
var global = {
794
process: {nextTick: nativeProcessNextTick}
795
};
796
var fakeTimers = new FakeTimers(global);
797
fakeTimers.useRealTimers();
798
799
// Ensure that the real timers are installed at this point
800
// (because if they aren't, this test might pass when it shouldn't)
801
expect(global.process.nextTick).toBe(nativeProcessNextTick);
802
803
fakeTimers.useFakeTimers();
804
805
expect(global.process.nextTick).not.toBe(nativeProcessNextTick);
806
});
807
808
it('resets mock setImmediate when present', function() {
809
var nativeSetImmediate = jest.genMockFn();
810
var nativeClearImmediate = jest.genMockFn();
811
812
var global = {
813
setImmediate: nativeSetImmediate,
814
clearImmediate: nativeClearImmediate
815
};
816
var fakeTimers = new FakeTimers(global);
817
fakeTimers.useRealTimers();
818
819
// Ensure that the real timers are installed at this point
820
// (because if they aren't, this test might pass when it shouldn't)
821
expect(global.setImmediate).toBe(nativeSetImmediate);
822
expect(global.clearImmediate).toBe(nativeClearImmediate);
823
824
fakeTimers.useFakeTimers();
825
826
expect(global.setImmediate).not.toBe(nativeSetImmediate);
827
expect(global.clearImmediate).not.toBe(nativeClearImmediate);
828
});
829
});
830
});
831
832