Skip to content

Commit 2c40bf8

Browse files
justin808claude
andauthored
Unskip Rspack RSC e2e tests on react-on-rails-rsc 19.2 (rc.3) (#4173)
## Summary `react_on_rails_rsc#105` — the Rspack RSC build skipping the client-references module map on the 19.2 line, so RSC client content never rendered/hydrated under Rspack — is fixed in `react-on-rails-rsc@19.2.0-rc.2`. This re-enables the 7 Pro/RSC dummy e2e tests that were conditionally skipped under the Rspack gate (`RSPACK_RSC_BROKEN_192`) pending that fix. ## Changes - Bump the Pro/RSC dummy dep and the `react_on_rails_pro_dummy>react-on-rails-rsc` pnpm override from `19.2.0-rc.1` → `19.2.0-rc.3` (rc.3 carries the rc.2 fix); refresh `pnpm-lock.yaml` and the override comment. - Remove the `RSPACK_RSC_BROKEN_192` / `RSPACK_RSC_SKIP_REASON` guards and the now-unused constants: - `react_on_rails_pro/spec/dummy/e2e-tests/rsc_route_ssr_false.spec.ts` — 3 skips - `react_on_rails_pro/spec/dummy/e2e-tests/rsc_fouc.spec.ts` — 4 skips ## Why now rc.2 (2026-06-17) and rc.3 (2026-06-21) shipped the Rspack module-map fix and `react_on_rails_rsc#105` is closed. Until now these tests were silently skipped under Rspack, so a regression on that path would not be caught during the 19.2 soak. ## Validation - Local: prettier + eslint clean on the changed specs. - The real proof is hosted CI: `rspack-dummy-app-tests` + `dummy-app-rspack-rsc-runtime-gate` now run the previously-skipped RSC-render assertions on rc.3. Requested `ready-for-hosted-ci`. ## Scope / risk Test-only + dummy-app dependency change. The published **17.0.0 default RSC pin stays at stable `19.0.5`** (the 19.2 line remains opt-in, tracked by #3865). No published-package source is touched, so no CHANGELOG entry. Context: `react_on_rails_rsc#105`, #3865, #4072. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Updated `react-on-rails-rsc` dependency to version 19.2.0-rc.3. * **Tests** * Enabled RSC streaming and route rendering tests that were previously skipped, improving test coverage for React Server Components functionality. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 1db1e20 commit 2c40bf8

5 files changed

Lines changed: 9 additions & 35 deletions

File tree

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@
129129
"These force patched versions of transitive dev dependencies. Remove when upstream packages update.",
130130
"ajv overrides were intentionally excluded: ajv v8 breaks webpack's schema-utils/ajv-keywords.",
131131
"The 2 moderate ajv alerts (ReDoS in $data option) are tolerable — ajv only validates our own config files.",
132-
"react_on_rails>react(-dom) scopes React 19.2 to the OSS dummy app (for the <Activity> demo, #3883). react_on_rails_pro_dummy>react(-dom)/react-on-rails-rsc scopes the Pro/RSC dummy to the coordinated React 19.2.7 + react-on-rails-rsc 19.2.0-rc.1 pair so CI soak-tests the RSC path on React 19.2 (#3865; gate landed in #4026). The workspace-wide pin stays at ~19.0.4 / react-on-rails-rsc 19.0.5 — the published/default pin for 17.0.0 — until #3865 promotes 19.2 to the default."
132+
"react_on_rails>react(-dom) scopes React 19.2 to the OSS dummy app (for the <Activity> demo, #3883). react_on_rails_pro_dummy>react(-dom)/react-on-rails-rsc scopes the Pro/RSC dummy to the coordinated React 19.2.7 + react-on-rails-rsc 19.2.0-rc.3 pair so CI soak-tests the RSC path on React 19.2 (#3865; gate landed in #4026). The workspace-wide pin stays at ~19.0.4 / react-on-rails-rsc 19.0.5 — the published/default pin for 17.0.0 — until #3865 promotes 19.2 to the default."
133133
],
134134
"overrides": {
135135
"react": "$react",
@@ -140,7 +140,7 @@
140140
"react_on_rails>react-dom": "^19.2.0",
141141
"react_on_rails_pro_dummy>react": "^19.2.7",
142142
"react_on_rails_pro_dummy>react-dom": "^19.2.7",
143-
"react_on_rails_pro_dummy>react-on-rails-rsc": "19.2.0-rc.1",
143+
"react_on_rails_pro_dummy>react-on-rails-rsc": "19.2.0-rc.3",
144144
"sentry-testkit>body-parser": "npm:empty-npm-package@1.0.0",
145145
"sentry-testkit>express": "npm:empty-npm-package@1.0.0",
146146
"lodash@>=4.0.0 <=4.17.22": ">=4.17.23 <5",

pnpm-lock.yaml

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

react_on_rails_pro/spec/dummy/e2e-tests/rsc_fouc.spec.ts

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -307,16 +307,6 @@ async function delayCompiledJavaScript(page: Page): Promise<JavaScriptController
307307
};
308308
}
309309

310-
// Rspack RSC content does not render on react-on-rails-rsc@19.2.0-rc.1 (the Rspack
311-
// build cannot locate the client runtime, so the RSC module map is not created).
312-
// Tracked in react_on_rails_rsc#105. These skips fire ONLY under the Rspack gate
313-
// (SHAKAPACKER_ASSETS_BUNDLER=rspack); the webpack RSC path still runs them. The
314-
// client-only reveal tests below are unaffected and keep running. Remove the skips
315-
// when react-on-rails-rsc@19.2.0-rc.2 fixes the Rspack module map.
316-
const RSPACK_RSC_BROKEN_192 = process.env.SHAKAPACKER_ASSETS_BUNDLER === 'rspack';
317-
const RSPACK_RSC_SKIP_REASON =
318-
'Rspack RSC content does not render on react-on-rails-rsc@19.2.0-rc.1 (module map not created) — react_on_rails_rsc#105; unskip at rc.2.';
319-
320310
test.describe('RSC and streaming FOUC acceptance coverage', () => {
321311
test.describe('resource reveal ordering', () => {
322312
test.beforeEach(async ({ page }) => {
@@ -330,7 +320,6 @@ test.describe('RSC and streaming FOUC acceptance coverage', () => {
330320
test('streamed RSC content is visible and styled when its CSS is loaded, even while JS is delayed', async ({
331321
page,
332322
}) => {
333-
test.skip(RSPACK_RSC_BROKEN_192, RSPACK_RSC_SKIP_REASON);
334323
const css = await controlCssBySentinel(page, RSC_SENTINEL);
335324
const scripts = await delayCompiledJavaScript(page);
336325

@@ -346,7 +335,6 @@ test.describe('RSC and streaming FOUC acceptance coverage', () => {
346335
});
347336

348337
test('streamed RSC content does not appear before its CSS when JS is available', async ({ page }) => {
349-
test.skip(RSPACK_RSC_BROKEN_192, RSPACK_RSC_SKIP_REASON);
350338
const css = await controlCssBySentinel(page, RSC_SENTINEL, { holdTarget: true });
351339

352340
await page.goto(RSC_FOUC_PATH, { waitUntil: 'commit' });
@@ -360,7 +348,6 @@ test.describe('RSC and streaming FOUC acceptance coverage', () => {
360348
});
361349

362350
test('streamed RSC content still waits for CSS if JS finishes first', async ({ page }) => {
363-
test.skip(RSPACK_RSC_BROKEN_192, RSPACK_RSC_SKIP_REASON);
364351
const css = await controlCssBySentinel(page, RSC_SENTINEL, { holdTarget: true });
365352
const scripts = await delayCompiledJavaScript(page);
366353

@@ -416,7 +403,6 @@ test.describe('RSC and streaming FOUC acceptance coverage', () => {
416403
});
417404

418405
test('RSC and client-only probe pages only load the CSS chunks they use', async ({ browser }) => {
419-
test.skip(RSPACK_RSC_BROKEN_192, RSPACK_RSC_SKIP_REASON);
420406
const rscPage = await browser.newPage();
421407
try {
422408
await recordProbePaints(rscPage, [RSC_PROBE_TARGET]);

react_on_rails_pro/spec/dummy/e2e-tests/rsc_route_ssr_false.spec.ts

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,8 @@ const UNWRAPPED_STREAM_PAYLOAD_KEY =
2626
'SimpleComponent-fun4a7ngv9-UnwrappedStreamRSCRouteDemo-react-component-0';
2727
const RSC_ROUTE_SSR_FALSE_BAILOUT_DIGEST = 'REACT_ON_RAILS_RSC_ROUTE_SSR_FALSE_BAILOUT';
2828

29-
// Rspack RSC content does not render on react-on-rails-rsc@19.2.0-rc.1 (the Rspack
30-
// build cannot locate the client runtime, so the RSC module map is not created).
31-
// Tracked in react_on_rails_rsc#105. These skips fire ONLY under the Rspack gate
32-
// (SHAKAPACKER_ASSETS_BUNDLER=rspack); the webpack RSC path still runs them. Remove
33-
// the skips when react-on-rails-rsc@19.2.0-rc.2 fixes the Rspack module map.
34-
const RSPACK_RSC_BROKEN_192 = process.env.SHAKAPACKER_ASSETS_BUNDLER === 'rspack';
35-
const RSPACK_RSC_SKIP_REASON =
36-
'Rspack RSC content does not render on react-on-rails-rsc@19.2.0-rc.1 (module map not created) — react_on_rails_rsc#105; unskip at rc.2.';
37-
3829
test.describe('RSCRoute ssr=false', () => {
3930
test('server-renders sibling routes while deferring the ssr=false route', async ({ page, request }) => {
40-
test.skip(RSPACK_RSC_BROKEN_192, RSPACK_RSC_SKIP_REASON);
4131
const response = await request.get(MIXED_ROUTE_PATH);
4232
expect(response.ok()).toBe(true);
4333
const html = await response.text();
@@ -85,7 +75,6 @@ test.describe('RSCRoute ssr=false', () => {
8575
page,
8676
request,
8777
}) => {
88-
test.skip(RSPACK_RSC_BROKEN_192, RSPACK_RSC_SKIP_REASON);
8978
const response = await request.get(UNWRAPPED_ROUTE_PATH);
9079
expect(response.ok()).toBe(true);
9180
const html = await response.text();
@@ -136,7 +125,6 @@ test.describe('RSCRoute ssr=false', () => {
136125
page,
137126
request,
138127
}) => {
139-
test.skip(RSPACK_RSC_BROKEN_192, RSPACK_RSC_SKIP_REASON);
140128
const response = await request.get(UNWRAPPED_STREAM_ROUTE_PATH);
141129
expect(response.ok()).toBe(true);
142130
const html = await response.text();

react_on_rails_pro/spec/dummy/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
"react-intl": "^10",
5757
"react-on-rails-pro": "workspace:*",
5858
"react-on-rails-pro-node-renderer": "workspace:*",
59-
"react-on-rails-rsc": "19.2.0-rc.1",
59+
"react-on-rails-rsc": "19.2.0-rc.3",
6060
"react-proptypes": "^1.0.0",
6161
"react-redux": "^9.2.0",
6262
"react-refresh": "^0.11.0",

0 commit comments

Comments
 (0)