diff --git a/packages/next/src/server/stream-utils/stream-utils.node.test.tsx b/packages/next/src/server/stream-utils/stream-utils.node.test.tsx
index 9dca617b6bcb18..06429d5048fd2b 100644
--- a/packages/next/src/server/stream-utils/stream-utils.node.test.tsx
+++ b/packages/next/src/server/stream-utils/stream-utils.node.test.tsx
@@ -1,8 +1,10 @@
-import { createBufferedTransformStream } from './stream-utils.node'
-import { PassThrough, type Readable } from 'node:stream'
+import {
+ createBufferedTransformStream,
+ streamToString,
+} from './stream-utils.node'
+import { PassThrough } from 'node:stream'
import { renderToPipeableStream } from 'react-dom/server.node'
import { Suspense } from 'react'
-import { streamToString } from '.'
import { StringDecoder } from 'node:string_decoder'
function App() {
@@ -37,16 +39,14 @@ function createInput(app = ): Promise {
})
}
-function getExpectedOutput(input: Readable) {
- return streamToString(input.pipe(new PassThrough()))
-}
-
describe('createBufferedTransformStream', () => {
it('should return a TransformStream that buffers input chunks across rendering boundaries', async () => {
const stream = createBufferedTransformStream()
const input = await createInput()
+ // This is essentially equivalent to a ReadableStream.tee()
+ // The important part is that both `pipe` calls happen before any read operation do.
const output = input.pipe(stream)
- const expectedCall = getExpectedOutput(input)
+ const expectedOutput = input.pipe(new PassThrough())
const actualChunks = await new Promise((resolve) => {
const chunks: Buffer[] = []
@@ -61,7 +61,7 @@ describe('createBufferedTransformStream', () => {
})
})
- const expected = await expectedCall
+ const expected = await streamToString(expectedOutput)
// React will send the suspense boundary piece second
expect(actualChunks.length).toBe(2)