Skip to content

Instantly share code, notes, and snippets.

@danew
Created December 6, 2022 17:56
Show Gist options
  • Save danew/b6f15e6fe980d53aa56c920149fdd088 to your computer and use it in GitHub Desktop.
Save danew/b6f15e6fe980d53aa56c920149fdd088 to your computer and use it in GitHub Desktop.
BroadcastChannel polyfill for Jest
import { EventEmitter } from 'node:events';
const channels: Map<string, EventEmitter> = new Map();
class MockBroadcastChannel implements BroadcastChannel {
private emitter: EventEmitter;
constructor(public name: string) {
if (channels.has(name)) {
this.emitter = channels.get(name);
} else {
const emitter = new EventEmitter();
channels.set(name, emitter);
this.emitter = emitter;
}
}
onmessage = jest.fn();
onmessageerror = jest.fn();
removeEventListener = jest.fn();
dispatchEvent = jest.fn();
postMessage = jest.fn().mockImplementation((message) => {
const event = { data: message };
this.emitter.emit('message', event);
});
addEventListener = jest.fn().mockImplementation((_: string, listener: any) => {
this.emitter.on('message', listener);
});
close = jest.fn().mockImplementation(() => {
this.emitter.removeAllListeners();
channels.delete(this.name);
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment