javascript / expert
Snippet
Abfangen unbehandelter Store-Fehler in Test-Suiten über EventTarget-Brücken
Entkoppelte asynchrone Zustandsspeicher schlagen oft außerhalb des gewöhnlichen Aufruf-Kontexts fehl. Die Nutzung von EventTarget-Unterklassen ermöglicht es Unit-Test-Runnern, asynchrone Store-Fehler deterministisch zu erfassen.
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
Erklärung
1
export class StoreErrorBridge extends EventTarget {
Erweitert die browser-eigene EventTarget-Klasse zur Entkopplung von Fehler-Events.
2
this.dispatchEvent(new CustomEvent('store-error', { detail: error }));
Löst ein typisiertes CustomEvent aus, welches das Fehlerobjekt enthält.
3
return new Promise((resolve, reject) => {
Gibt ein Promise zurück, das erfüllt wird, sobald der erwartete store-Fehler auftritt.
4
storeBus.removeEventListener('store-error', handler);
Entfernt den Event-Listener sofort nach dem Abfangen eines Fehler-Events.
5
if (event.detail.message.includes(expectedMessage)) resolve();
Überprüft, ob die abgefangene Fehlermeldung mit den erwarteten Test-Assertionen übereinstimmt.