javascript / expert
Snippet
Intercepting Unhandled Store Failures in Test Suites via EventTarget Bridges
Decoupled asynchronous state stores often fail out-of-band without throwing within the immediate caller context. Using EventTarget subclassing enables unit test runners to capture asynchronous store errors deterministically.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
export class StoreErrorBridge extends EventTarget {dispatchFailure(error) {this.dispatchEvent(new CustomEvent('store-error', { detail: error }));}}export function assertStoreThrows(storeBus, expectedMessage) {return new Promise((resolve, reject) => {const handler = (event) => {storeBus.removeEventListener('store-error', handler);if (event.detail.message.includes(expectedMessage)) resolve();else reject(new Error(`Unexpected error message: ${event.detail.message}`));};storeBus.addEventListener('store-error', handler);});}
svelte
Breakdown
1
export class StoreErrorBridge extends EventTarget {
Extends the browser native EventTarget class to support decoupling error events.
2
this.dispatchEvent(new CustomEvent('store-error', { detail: error }));
Dispatches a strongly typed custom event wrapping the failure object payload.
3
return new Promise((resolve, reject) => {
Returns a Promise that completes once the anticipated asynchronous store error triggers.
4
storeBus.removeEventListener('store-error', handler);
Cleans up the event listener immediately upon intercepting an error event.
5
if (event.detail.message.includes(expectedMessage)) resolve();
Verifies that the intercepted error message matches expected test assertions.