Skip to content

Commit c1dd521

Browse files
committed
fix e2e
1 parent f60d0fb commit c1dd521

File tree

4 files changed

+34
-20
lines changed

4 files changed

+34
-20
lines changed

examples/app-router/app/streaming/route.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,10 @@ const encoder = new TextEncoder();
2323

2424
async function* makeIterator() {
2525
for (let i = 1; i <= 10; i++) {
26-
yield encoder.encode(`<p data-testid="iteratorCount">${i}</p>`);
26+
const timestamp = Date.now();
27+
yield encoder.encode(
28+
`<p data-testid="iteratorCount" data-timestamp="${timestamp}">${i}</p>`
29+
);
2730
await sleep(1000);
2831
}
2932
}

examples/pages-router/src/pages/api/streaming/index.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@ const encoder = new TextEncoder();
2525

2626
async function* makeIterator() {
2727
for (let i = 1; i <= 10; i++) {
28-
yield encoder.encode(`<p data-testid="iteratorCount">${i}</p>`);
28+
const timestamp = Date.now();
29+
yield encoder.encode(
30+
`<p data-testid="iteratorCount" data-timestamp="${timestamp}">${i}</p>`
31+
);
2932
await sleep(1000);
3033
}
3134
}

packages/tests-e2e/tests/appRouter/streaming.test.ts

+12-8
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,14 @@ test("streaming should work in route handler", async ({ page }) => {
3030
seenNumbers.length < ITERATOR_LENGTH &&
3131
Date.now() - startTime < 11000
3232
) {
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');
3738
seenNumbers.push({
38-
number: paragraphs[seenNumbers.length],
39-
time: Date.now() - startTime,
39+
number: await newElement.innerText(),
40+
time: parseInt(timestamp || '0', 10)
4041
});
4142
}
4243
await page.waitForTimeout(100);
@@ -46,9 +47,12 @@ test("streaming should work in route handler", async ({ page }) => {
4647
[...Array(ITERATOR_LENGTH)].map((_, i) => String(i + 1)),
4748
);
4849

49-
// verify streaming timing
50+
// verify streaming timing using server timestamps
5051
for (let i = 1; i < seenNumbers.length; i++) {
5152
const timeDiff = seenNumbers[i].time - seenNumbers[i - 1].time;
52-
expect(timeDiff).toBeGreaterThanOrEqual(900);
53+
console.log(i, timeDiff);
54+
expect(timeDiff).toBeGreaterThanOrEqual(
55+
900,
56+
);
5357
}
5458
});

packages/tests-e2e/tests/pagesRouter/streaming.test.ts

+14-10
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { expect, test } from "@playwright/test";
22

3-
test("streaming should work in api route", async ({ page }) => {
3+
test("streaming should work in route handler", async ({ page }) => {
44
const ITERATOR_LENGTH = 10;
55

6-
const res = await page.goto("/api/streaming", {
6+
const res = await page.goto("/streaming", {
77
// we set waitUntil: "commit" to ensure that the response is streamed
88
// without this option, the response would be buffered and sent all at once
99
// 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 }) => {
3030
seenNumbers.length < ITERATOR_LENGTH &&
3131
Date.now() - startTime < 11000
3232
) {
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');
3738
seenNumbers.push({
38-
number: paragraphs[seenNumbers.length],
39-
time: Date.now() - startTime,
39+
number: await newElement.innerText(),
40+
time: parseInt(timestamp || '0', 10)
4041
});
4142
}
4243
await page.waitForTimeout(100);
@@ -46,9 +47,12 @@ test("streaming should work in api route", async ({ page }) => {
4647
[...Array(ITERATOR_LENGTH)].map((_, i) => String(i + 1)),
4748
);
4849

49-
// verify streaming timing
50+
// verify streaming timing using server timestamps
5051
for (let i = 1; i < seenNumbers.length; i++) {
5152
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+
);
5357
}
5458
});

0 commit comments

Comments
 (0)