javascript / expert
Snippet
Mocken von ReadableStream-Async-Generatoren für Next.js Server-Component-Tests
Beim Unit-Testen im Next.js App Router erfordern Server Components und API-Routen mit Streaming-Antworten das Mocken von ReadableStream-Objekten. Durch Definieren einer benutzerdefinierten pull-Controller-Methode simulieren Entwickler die schrittweise Chunk-Bereitstellung in Serverumgebungen.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
export function createStreamMock(chunks: string[]): ReadableStream<Uint8Array> {const encoder = new TextEncoder();return new ReadableStream({async pull(controller) {if (chunks.length === 0) {controller.close();return;}controller.enqueue(encoder.encode(chunks.shift()));}});}
nextjs
Erklärung
1
export function createStreamMock(chunks: string[]): ReadableStream<Uint8Array> {
Definiert eine Hilfsfunktion, die einen typisierten ReadableStream aus binären Uint8Array-Chunks zurückgibt.
2
const encoder = new TextEncoder();
Instanziiert TextEncoder, um UTF-8-String-Chunks in binäre Byte-Arrays zu übersetzen.
3
return new ReadableStream({
Erstellt eine ReadableStream-Instanz der Web Streams API für Next.js Response Streaming.
4
async pull(controller) {
Implementiert die pull-Strategie der Quelle, die aufgerufen wird, wenn der Stream-Reader Daten anfordert.
5
if (chunks.length === 0) {
Prüft, ob alle eingereihten Text-Chunks aus den Mock-Stream-Daten verarbeitet wurden.
6
controller.close();
Signallisiert dem Verbraucher den Abschluss des Streams, wenn keine Chunks mehr vorhanden sind.
7
return;
Beendet die Ausführung der pull-Schleife vorzeitig.
8
}
Schließt den bedingten Zweig.
9
controller.enqueue(encoder.encode(chunks.shift()));
Entfernt das erste Element, kodiert es in Uint8Array-Bytes und reiht es für Stream-Empfänger ein.
10
}
Schließt die Implementierung der pull-Methode.
11
});
Beendet das Stream-Konfigurationsobjekt im ReadableStream-Konstruktor.
12
}
Schließt den Funktionskörper.