@@ -3,15 +3,27 @@ import path from "node:path";
3
3
import type { Page , PlaywrightWorkerOptions } from "@playwright/test" ;
4
4
import { expect } from "@playwright/test" ;
5
5
6
- import type { Files } from "./helpers/vite.js" ;
6
+ import type { Files , TemplateName } from "./helpers/vite.js" ;
7
7
import {
8
8
test ,
9
9
createEditor ,
10
10
EXPRESS_SERVER ,
11
11
viteConfig ,
12
12
viteMajorTemplates ,
13
+ reactRouterConfig ,
13
14
} from "./helpers/vite.js" ;
14
15
16
+ const templates = [
17
+ ...viteMajorTemplates ,
18
+ {
19
+ templateName : "rsc-vite-framework" ,
20
+ templateDisplayName : "RSC Framework Mode" ,
21
+ } ,
22
+ ] as const satisfies ReadonlyArray < {
23
+ templateName : TemplateName ;
24
+ templateDisplayName : string ;
25
+ } > ;
26
+
15
27
const indexRoute = `
16
28
// imports
17
29
import { useState, useEffect } from "react";
@@ -40,28 +52,36 @@ const indexRoute = `
40
52
` ;
41
53
42
54
test . describe ( "Vite HMR & HDR" , ( ) => {
43
- viteMajorTemplates . forEach ( ( { templateName, templateDisplayName } ) => {
55
+ templates . forEach ( ( { templateName, templateDisplayName } ) => {
44
56
test . describe ( templateDisplayName , ( ) => {
45
57
test ( "vite dev" , async ( { page, browserName, dev } ) => {
46
58
let files : Files = async ( { port } ) => ( {
47
- "vite.config.js" : await viteConfig . basic ( { port } ) ,
59
+ "vite.config.js" : await viteConfig . basic ( { port, templateName } ) ,
60
+ "react-router.config.ts" : reactRouterConfig ( {
61
+ viteEnvironmentApi : templateName . includes ( "rsc" ) ,
62
+ } ) ,
48
63
"app/routes/_index.tsx" : indexRoute ,
49
64
} ) ;
50
65
let { cwd, port } = await dev ( files , templateName ) ;
51
- await workflow ( { page, browserName, cwd, port } ) ;
66
+ await workflow ( { templateName , page, browserName, cwd, port } ) ;
52
67
} ) ;
53
68
54
69
test ( "express" , async ( { page, browserName, customDev } ) => {
70
+ test . skip ( templateName . includes ( "rsc" ) , "RSC is not supported" ) ;
55
71
let files : Files = async ( { port } ) => ( {
56
- "vite.config.js" : await viteConfig . basic ( { port } ) ,
72
+ "vite.config.js" : await viteConfig . basic ( { port, templateName } ) ,
73
+ "react-router.config.ts" : reactRouterConfig ( {
74
+ viteEnvironmentApi : templateName . includes ( "rsc" ) ,
75
+ } ) ,
57
76
"server.mjs" : EXPRESS_SERVER ( { port } ) ,
58
77
"app/routes/_index.tsx" : indexRoute ,
59
78
} ) ;
60
79
let { cwd, port } = await customDev ( files , templateName ) ;
61
- await workflow ( { page, browserName, cwd, port } ) ;
80
+ await workflow ( { templateName , page, browserName, cwd, port } ) ;
62
81
} ) ;
63
82
64
83
test ( "mdx" , async ( { page, dev } ) => {
84
+ test . skip ( templateName . includes ( "rsc" ) , "RSC is not supported" ) ;
65
85
let files : Files = async ( { port } ) => ( {
66
86
"vite.config.ts" : `
67
87
import { defineConfig } from "vite";
@@ -120,11 +140,13 @@ test.describe("Vite HMR & HDR", () => {
120
140
} ) ;
121
141
122
142
async function workflow ( {
143
+ templateName,
123
144
page,
124
145
browserName,
125
146
cwd,
126
147
port,
127
148
} : {
149
+ templateName : TemplateName ;
128
150
page : Page ;
129
151
browserName : PlaywrightWorkerOptions [ "browserName" ] ;
130
152
cwd : string ;
@@ -145,7 +167,12 @@ async function workflow({
145
167
146
168
// setup: browser state
147
169
let hmrStatus = page . locator ( "#index [data-hmr]" ) ;
148
- await expect ( page ) . toHaveTitle ( "HMR updated title: 0" ) ;
170
+
171
+ // RSC doesn't support meta export?
172
+ if ( ! templateName . includes ( "rsc" ) ) {
173
+ await expect ( page ) . toHaveTitle ( "HMR updated title: 0" ) ;
174
+ }
175
+
149
176
await expect ( hmrStatus ) . toHaveText ( "HMR updated: 0" ) ;
150
177
let input = page . locator ( "#index input" ) ;
151
178
await expect ( input ) . toBeVisible ( ) ;
@@ -159,7 +186,12 @@ async function workflow({
159
186
. replace ( "HMR updated: 0" , "HMR updated: 1" ) ,
160
187
) ;
161
188
await page . waitForLoadState ( "networkidle" ) ;
162
- await expect ( page ) . toHaveTitle ( "HMR updated title: 1" ) ;
189
+
190
+ // RSC doesn't support meta export?
191
+ if ( ! templateName . includes ( "rsc" ) ) {
192
+ await expect ( page ) . toHaveTitle ( "HMR updated title: 1" ) ;
193
+ }
194
+
163
195
await expect ( hmrStatus ) . toHaveText ( "HMR updated: 1" ) ;
164
196
await expect ( input ) . toHaveValue ( "stateful" ) ;
165
197
expect ( page . errors ) . toEqual ( [ ] ) ;
0 commit comments