UNPKG

abort-utils

Version:

Utility functions to use and combine `AbortSignal` and `AbortController` with Promises

40 lines (39 loc) 1.48 kB
import { setTimeout } from 'node:timers/promises'; import { it, expect } from 'vitest'; import { promiseFromSignal } from './promise-from-signal.js'; expect.extend({ async toBePending(promise) { const result = await Promise.race([promise, setTimeout(0, 10)]); if (result === 10) { return { message: () => 'Expected Promise to be pending.', pass: true, }; } return { message: () => 'Expected Promise to be pending, but it resolved.', pass: false, }; }, }); it('resolves when the signal is aborted', async () => { const controller = new AbortController(); const promise = promiseFromSignal(controller.signal); await expect(promise).toBePending(); controller.abort('boredom'); await expect(promise).resolves.toBe('boredom'); }); it('rejects when the signal is aborted', async () => { const controller = new AbortController(); const promise = promiseFromSignal(controller.signal, { rejects: true }); await expect(promise).toBePending(); controller.abort('boredom'); await expect(promise).rejects.toBe('boredom'); }); it('resolves when the signal is already aborted', async () => { const controller = new AbortController(); controller.abort('boredom'); const promise = promiseFromSignal(controller.signal); await expect(promise).not.toBePending(); await expect(promise).resolves.toBe('boredom'); });