forked from jestjs/jest
/
p-timeout-test.js
48 lines (43 loc) · 1.59 KB
/
p-timeout-test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/**
* Copyright (c) 2015-present, Facebook, Inc. All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @emails oncall+jsinfra
*/
'use strict';
jest.useFakeTimers();
const pTimeout = require('../p-timeout');
describe('pTimeout', () => {
it('calls `clearTimeout` and resolves when `promise` resolves.', async () => {
const onTimeout = jest.fn();
const promise = Promise.resolve();
await pTimeout(promise, 1000, clearTimeout, setTimeout, onTimeout);
expect(setTimeout).toHaveBeenCalled();
expect(clearTimeout).toHaveBeenCalled();
expect(onTimeout).not.toHaveBeenCalled();
});
it('calls `clearTimeout` and rejects when `promise` rejects.', async () => {
const onTimeout = jest.fn();
const promise = Promise.reject();
try {
await pTimeout(promise, 1000, clearTimeout, setTimeout, onTimeout);
} catch (e) { }
expect(setTimeout).toHaveBeenCalled();
expect(clearTimeout).toHaveBeenCalled();
expect(onTimeout).not.toHaveBeenCalled();
});
it('calls `onTimeout` on timeout.', async () => {
const onTimeout = jest.fn();
// A Promise that never resolves or rejects.
const promise = new Promise(() => {});
const timeoutPromise =
pTimeout(promise, 1000, clearTimeout, setTimeout, onTimeout);
jest.runAllTimers();
await timeoutPromise;
expect(setTimeout).toHaveBeenCalled();
expect(onTimeout).toHaveBeenCalled();
});
});