-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathtest.js
80 lines (73 loc) · 1.86 KB
/
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
'use strict';
const assert = require('assert');
const batchPromises = require('./index.js');
describe('batchPromises', () => {
it('should return an array of results', () => {
return batchPromises(
2,
[1, 2, 3, 4, 5],
(i) =>
new Promise((resolve) => {
setTimeout(() => {
resolve(i);
}, 10);
})
).then((res) => {
assert.deepEqual(res, [1, 2, 3, 4, 5]);
});
});
it('should work with a promise returning an array', () => {
return batchPromises(
2,
Promise.resolve([1, 2, 3, 4, 5]),
(i) =>
new Promise((resolve) => {
setTimeout(() => {
resolve(i);
}, 10);
})
).then((res) => {
assert.deepEqual(res, [1, 2, 3, 4, 5]);
});
});
it('should batch promises', () => {
let mostConcurrent = 0;
let currentBatch = 0;
return batchPromises(
2,
[1, 2, 3, 4, 5],
(i) =>
new Promise((resolve) => {
setTimeout(() => {
currentBatch++;
if (currentBatch > mostConcurrent) mostConcurrent = currentBatch;
resolve(i);
}, 10);
setTimeout(() => {
currentBatch = 0;
}, 11);
})
).then(() => {
assert.equal(mostConcurrent, 2);
});
});
it('should reject on an error and halt execution', () => {
let highestPromise;
const expectedError = new Error('something went wrong');
return batchPromises(
2,
[1, 2, 3, 4, 5],
(i) =>
new Promise((resolve, reject) => {
setTimeout(() => {
if (i === 3) return reject(expectedError);
highestPromise = i;
resolve(i);
}, 10);
})
).catch((actualError) => {
assert.equal(actualError, expectedError);
assert.equal(highestPromise, 2);
});
});
});