javascript / expert
Snippet
Unit-Testing Expliziter Ressourcenverwaltung (Symbol.dispose) in Hook-Cleanups
Verwendet den ES-Standard zur expliziten Ressourcenverwaltung (Symbol.dispose) in React useEffect Cleanup-Callbacks und verifiziert den deterministischen Ressourcenabbau mittels Unmount-Testing.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import { renderHook } from '@testing-library/react';import { useEffect } from 'react';function useExplicitResource(resource) {useEffect(() => {return () => {if (typeof resource[Symbol.dispose] === 'function') {resource[Symbol.dispose]();}};}, [resource]);}test('disposes resource on unmount', () => {const disposeSpy = jest.fn();const mockResource = { [Symbol.dispose]: disposeSpy };const { unmount } = renderHook(() => useExplicitResource(mockResource));unmount();expect(disposeSpy).toHaveBeenCalledTimes(1);});
react
Erklärung
1
if (typeof resource[Symbol.dispose] === 'function') {
Prüft, ob das übergebene Objekt das Disposable-Interface über Symbol.dispose erfüllt.
2
resource[Symbol.dispose]();
Führt die aufräumende Logik aus, die auf der expliziten Disposable-Ressource definiert ist.
3
const { unmount } = renderHook(() => useExplicitResource(mockResource));
Rendert den Hook isoliert, um das Aufräumen im Lebenszyklus zu testen.