Skip to content

Commit ca4280c

Browse files
committed
fix: flaky signal e2e test
1 parent 5086648 commit ca4280c

File tree

3 files changed

+39
-31
lines changed

3 files changed

+39
-31
lines changed

Diff for: packages/qwik/src/core/shared/shared-serialization.ts

+36-30
Original file line numberDiff line numberDiff line change
@@ -1296,7 +1296,7 @@ async function serialize(serializationContext: SerializationContext): Promise<vo
12961296

12971297
function $resolvePromise$(
12981298
promise: Promise<unknown>,
1299-
$addRoot$: (obj: unknown) => string | number,
1299+
$addRoot$: (obj: unknown) => number,
13001300
classCreator: (resolved: boolean, resolvedValue: unknown) => PromiseResult
13011301
) {
13021302
const forwardRefId = forwardRefsId++;
@@ -1315,44 +1315,50 @@ async function serialize(serializationContext: SerializationContext): Promise<vo
13151315
return forwardRefId;
13161316
}
13171317

1318-
$writer$.write('[');
1318+
const outputRoots = async () => {
1319+
$writer$.write('[');
13191320

1320-
let lastRootsLength = 0;
1321-
let rootsLength = serializationContext.$roots$.length;
1322-
while (lastRootsLength < rootsLength || promises.size) {
1323-
if (lastRootsLength !== 0) {
1324-
$writer$.write(',');
1325-
}
1326-
for (let i = lastRootsLength; i < rootsLength; i++) {
1327-
const root = serializationContext.$roots$[i];
1328-
writeValue(root);
1329-
const isLast = i === rootsLength - 1;
1330-
if (!isLast) {
1321+
let lastRootsLength = 0;
1322+
let rootsLength = serializationContext.$roots$.length;
1323+
while (lastRootsLength < rootsLength || promises.size) {
1324+
if (lastRootsLength !== 0) {
13311325
$writer$.write(',');
13321326
}
1333-
}
13341327

1335-
if (promises.size) {
1336-
try {
1337-
await Promise.race(promises);
1338-
} catch {
1339-
// ignore rejections, they will be serialized as rejected promises
1328+
let separator = false;
1329+
for (let i = lastRootsLength; i < rootsLength; i++) {
1330+
if (separator) {
1331+
$writer$.write(',');
1332+
} else {
1333+
separator = true;
1334+
}
1335+
writeValue(serializationContext.$roots$[i]);
1336+
}
1337+
1338+
if (promises.size) {
1339+
try {
1340+
await Promise.race(promises);
1341+
} catch {
1342+
// ignore rejections, they will be serialized as rejected promises
1343+
}
13401344
}
1345+
1346+
lastRootsLength = rootsLength;
1347+
rootsLength = serializationContext.$roots$.length;
13411348
}
13421349

1343-
lastRootsLength = rootsLength;
1344-
rootsLength = serializationContext.$roots$.length;
1345-
}
1350+
if (forwardRefs.length) {
1351+
$writer$.write(',');
1352+
$writer$.write(TypeIds.ForwardRefs + ',');
1353+
outputArray(forwardRefs, (value) => {
1354+
$writer$.write(String(value));
1355+
});
1356+
}
13461357

1347-
if (forwardRefs.length) {
1348-
$writer$.write(',');
1349-
$writer$.write(TypeIds.ForwardRefs + ',');
1350-
outputArray(forwardRefs, (value) => {
1351-
$writer$.write(String(value));
1352-
});
1353-
}
1358+
$writer$.write(']');
1359+
};
13541360

1355-
$writer$.write(']');
1361+
await outputRoots();
13561362
}
13571363

13581364
function $getCustomSerializerPromise$<T, S>(signal: SerializerSignalImpl<T, S>, value: any) {

Diff for: packages/qwik/src/core/shared/shared-serialization.unit.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -447,7 +447,7 @@ describe('shared-serialization', () => {
447447
Constant null
448448
]
449449
2 RootRef "1 1 0 0"
450-
(96 chars)"
450+
(88 chars)"
451451
`);
452452
});
453453
it(title(TypeIds.ComputedSignal), async () => {

Diff for: starters/e2e/e2e.signals.e2e.ts

+2
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,8 @@ test.describe("signals", () => {
464464
await expect(resultC).toHaveText("0:0");
465465
await expect(resultTotal).toHaveText("0:0");
466466

467+
await page.waitForLoadState("networkidle");
468+
467469
await buttonA.click();
468470
await expect(resultA).toHaveText("1:1");
469471
await expect(resultB).toHaveText("0:0");

0 commit comments

Comments
 (0)