1
1
import { expect , test } from "@playwright/test" ;
2
2
3
- test ( "streaming should work in api route" , async ( { page } ) => {
3
+ test ( "streaming should work in route handler " , async ( { page } ) => {
4
4
const ITERATOR_LENGTH = 10 ;
5
5
6
- const res = await page . goto ( "/api/ streaming" , {
6
+ const res = await page . goto ( "/streaming" , {
7
7
// we set waitUntil: "commit" to ensure that the response is streamed
8
8
// without this option, the response would be buffered and sent all at once
9
9
// we could also drop the `await` aswell, but then we can't see the headers first.
@@ -30,13 +30,14 @@ test("streaming should work in api route", async ({ page }) => {
30
30
seenNumbers . length < ITERATOR_LENGTH &&
31
31
Date . now ( ) - startTime < 11000
32
32
) {
33
- const paragraphs = await page . getByTestId ( "iteratorCount" ) . allInnerTexts ( ) ;
34
- if ( paragraphs . length > seenNumbers . length ) {
35
- // ensure that the numbers are streamed one by one
36
- expect ( paragraphs . length ) . toBe ( seenNumbers . length + 1 ) ;
33
+ const elements = await page . getByTestId ( "iteratorCount" ) . all ( ) ;
34
+ if ( elements . length > seenNumbers . length ) {
35
+ expect ( elements . length ) . toBe ( seenNumbers . length + 1 ) ;
36
+ const newElement = elements [ elements . length - 1 ] ;
37
+ const timestamp = await newElement . getAttribute ( 'data-timestamp' ) ;
37
38
seenNumbers . push ( {
38
- number : paragraphs [ seenNumbers . length ] ,
39
- time : Date . now ( ) - startTime ,
39
+ number : await newElement . innerText ( ) ,
40
+ time : parseInt ( timestamp || '0' , 10 )
40
41
} ) ;
41
42
}
42
43
await page . waitForTimeout ( 100 ) ;
@@ -46,9 +47,12 @@ test("streaming should work in api route", async ({ page }) => {
46
47
[ ...Array ( ITERATOR_LENGTH ) ] . map ( ( _ , i ) => String ( i + 1 ) ) ,
47
48
) ;
48
49
49
- // verify streaming timing
50
+ // verify streaming timing using server timestamps
50
51
for ( let i = 1 ; i < seenNumbers . length ; i ++ ) {
51
52
const timeDiff = seenNumbers [ i ] . time - seenNumbers [ i - 1 ] . time ;
52
- expect ( timeDiff ) . toBeGreaterThanOrEqual ( 900 ) ;
53
+ console . log ( i , timeDiff ) ;
54
+ expect ( timeDiff ) . toBeGreaterThanOrEqual (
55
+ 800 ,
56
+ ) ;
53
57
}
54
58
} ) ;
0 commit comments