-
Notifications
You must be signed in to change notification settings - Fork 57
/
Copy pathasync_tracker.test.js
48 lines (41 loc) · 1.37 KB
/
async_tracker.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
/* eslint-env node, jest */
const tracker = require("./async_tracker");
test("local (non-continuation-based) tracked access", () => {
let payload = {};
tracker.setTracked(payload);
expect(tracker.getTracked()).toBe(payload);
tracker.deleteTracked();
expect(tracker.getTracked()).toBeUndefined();
});
test("runWithoutTracking runs the function without a current payload", () => {
let payload = {};
tracker.setTracked(payload);
tracker.runWithoutTracking(() => {
expect(tracker.getTracked()).toBeUndefined();
});
expect(tracker.getTracked()).toBe(payload);
});
test("bindFunction returns a function that installs the payload", () => {
let payload = {};
tracker.setTracked(payload);
let fn = tracker.bindFunction(() => {
expect(tracker.getTracked()).toBe(payload);
});
tracker.deleteTracked();
expect(tracker.getTracked()).toBeUndefined();
fn();
expect(tracker.getTracked()).toBeUndefined();
});
test("callbacks are automatically attached to their parent context's payload", (done) => {
let payload = {};
tracker.setTracked(payload);
let run = false;
setTimeout(() => {
run = true;
expect(tracker.getTracked()).toBe(payload);
done();
}, 100);
// this line will run before the body of the timeout callback above (extra assertion here in case we turn on jest mock timers)
expect(run).toBe(false);
tracker.deleteTracked();
});