Skip to content

Commit d597a64

Browse files
committed
fix: flaky signal e2e test
1 parent 43afc3a commit d597a64

File tree

2 files changed

+38
-30
lines changed

2 files changed

+38
-30
lines changed

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

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

13061306
function $resolvePromise$(
13071307
promise: Promise<unknown>,
1308-
$addRoot$: (obj: unknown) => string | number,
1308+
$addRoot$: (obj: unknown) => number,
13091309
classCreator: (resolved: boolean, resolvedValue: unknown) => PromiseResult
13101310
) {
13111311
const forwardRefId = forwardRefsId++;
@@ -1324,44 +1324,50 @@ async function serialize(serializationContext: SerializationContext): Promise<vo
13241324
return forwardRefId;
13251325
}
13261326

1327-
$writer$.write('[');
1327+
const outputRoots = async () => {
1328+
$writer$.write('[');
13281329

1329-
let lastRootsLength = 0;
1330-
let rootsLength = serializationContext.$roots$.length;
1331-
while (lastRootsLength < rootsLength || promises.size) {
1332-
if (lastRootsLength !== 0) {
1333-
$writer$.write(',');
1334-
}
1335-
for (let i = lastRootsLength; i < rootsLength; i++) {
1336-
const root = serializationContext.$roots$[i];
1337-
writeValue(root);
1338-
const isLast = i === rootsLength - 1;
1339-
if (!isLast) {
1330+
let lastRootsLength = 0;
1331+
let rootsLength = serializationContext.$roots$.length;
1332+
while (lastRootsLength < rootsLength || promises.size) {
1333+
if (lastRootsLength !== 0) {
13401334
$writer$.write(',');
13411335
}
1342-
}
13431336

1344-
if (promises.size) {
1345-
try {
1346-
await Promise.race(promises);
1347-
} catch {
1348-
// ignore rejections, they will be serialized as rejected promises
1337+
let separator = false;
1338+
for (let i = lastRootsLength; i < rootsLength; i++) {
1339+
if (separator) {
1340+
$writer$.write(',');
1341+
} else {
1342+
separator = true;
1343+
}
1344+
writeValue(serializationContext.$roots$[i]);
1345+
}
1346+
1347+
if (promises.size) {
1348+
try {
1349+
await Promise.race(promises);
1350+
} catch {
1351+
// ignore rejections, they will be serialized as rejected promises
1352+
}
13491353
}
1354+
1355+
lastRootsLength = rootsLength;
1356+
rootsLength = serializationContext.$roots$.length;
13501357
}
13511358

1352-
lastRootsLength = rootsLength;
1353-
rootsLength = serializationContext.$roots$.length;
1354-
}
1359+
if (forwardRefs.length) {
1360+
$writer$.write(',');
1361+
$writer$.write(TypeIds.ForwardRefs + ',');
1362+
outputArray(forwardRefs, (value) => {
1363+
$writer$.write(String(value));
1364+
});
1365+
}
13551366

1356-
if (forwardRefs.length) {
1357-
$writer$.write(',');
1358-
$writer$.write(TypeIds.ForwardRefs + ',');
1359-
outputArray(forwardRefs, (value) => {
1360-
$writer$.write(String(value));
1361-
});
1362-
}
1367+
$writer$.write(']');
1368+
};
13631369

1364-
$writer$.write(']');
1370+
await outputRoots();
13651371
}
13661372

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

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)