abort-utils
Version:
Utility functions to use and combine `AbortSignal` and `AbortController` with Promises
36 lines (35 loc) • 1.52 kB
JavaScript
// @vitest-environment happy-dom
import { it, expect } from 'vitest';
import { signalFromEvent } from './signal-from-event.js';
it('aborts when the event is dispatched', async () => {
const target = new EventTarget();
const signal = signalFromEvent(target, 'event');
expect(signal.aborted).toBe(false);
target.dispatchEvent(new Event('event'));
expect(signal.aborted).toBe(true);
});
it('aborts when the event is dispatched with filter', async () => {
const target = new EventTarget();
const signal = signalFromEvent(target, 'click', {
filter: event => event.button === 3,
});
expect(signal.aborted).toBe(false);
target.dispatchEvent(new MouseEvent('click', { button: 2 }));
expect(signal.aborted).toBe(false);
target.dispatchEvent(new MouseEvent('click', { button: 3 }));
expect(signal.aborted).toBe(true);
});
it('aborts when the event is dispatched with async filter', async () => {
const target = new EventTarget();
const signal = signalFromEvent(target, 'click', {
filter: async (event) => event.button === 3,
});
expect(signal.aborted).toBe(false);
target.dispatchEvent(new MouseEvent('click', { button: 2 }));
await Promise.resolve(); // Let the async filter resolve
expect(signal.aborted).toBe(false);
target.dispatchEvent(new MouseEvent('click', { button: 3 }));
expect(signal.aborted).toBe(false);
await Promise.resolve(); // Let the async filter resolve
expect(signal.aborted).toBe(true);
});