Press n or j to go to the next uncovered block, b, p or k for the previous block.
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 | import makeDeferred from './makeDeferred'; import Queue from './Queue'; /** * Utils */ function timeout(delay) { const { resolve, promise } = makeDeferred(); setTimeout(() => void resolve(Date.now()), delay); return promise; } /** * Tests */ const threshold = 2400; describe('Queue', () => { // Todo: comment due to wrong implementation // it('should bind functions to the queue', async () => { // const queue = new Queue(2); // const mockedTimeout = jest.fn(timeout); // const timer = queue.bind(mockedTimeout); // const start = Date.now(); // timer(threshold).then(now => { // const elapsed = now - start; // expect(elapsed >= threshold && elapsed <= 2 * threshold).toBe(true); // }); // const end = await timer(threshold); // expect(end - start >= 2 * threshold).toBe(true); // expect(mockedTimeout).toBeCalledTimes(2); // }); it('should prevent task execution when queue limit is reached', async () => { const queue = new Queue(1); const mockedTimeout = jest.fn(timeout); const timer = queue.bind(mockedTimeout); const start = Date.now(); const promise = timer(threshold).then(time => time - start); try { await timer(threshold); } catch (e) { expect(Date.now() - start < threshold).toBe(true); expect(e.message).toBe('Queue limit reached'); } const elapsed = await promise; expect(elapsed >= threshold && elapsed < 2 * threshold).toBe(true); expect(mockedTimeout).toBeCalledTimes(1); }); it('should safely bind tasks to the queue', async () => { const queue = new Queue(1); const mockedErrorHandler = jest.fn(); const mockedTimeout = jest.fn(timeout); const timer = queue.bindSafe(mockedTimeout, mockedErrorHandler); const start = Date.now(); const promise = timer(threshold).then(time => time - start); await timer(threshold); expect(Date.now() - start < threshold).toBe(true); expect(mockedErrorHandler).toBeCalledTimes(1); expect(mockedErrorHandler).nthCalledWith( 1, expect.objectContaining({ message: 'Queue limit reached' }) ); const elapsed = await promise; expect(elapsed >= threshold && elapsed < 2 * threshold).toBe(true); expect(mockedTimeout).toBeCalledTimes(1); }); }); |