@@ -10,7 +10,7 @@ import {
10
10
type CreateProject ,
11
11
type ProjectVariant
12
12
} from 'sv/testing' ;
13
- import { chromium , type Browser , type Page } from '@playwright/test' ;
13
+ import { chromium , type Browser , type BrowserContext , type Page } from '@playwright/test' ;
14
14
15
15
const cwd = vitest . inject ( 'testDir' ) ;
16
16
const templatesDir = vitest . inject ( 'templatesDir' ) ;
@@ -21,18 +21,25 @@ type Fixtures<Addons extends AddonMap> = {
21
21
run ( variant : ProjectVariant , options : OptionMap < Addons > ) : Promise < string > ;
22
22
} ;
23
23
24
- export function setupTest < Addons extends AddonMap > ( addons : Addons ) {
24
+ export function setupTest < Addons extends AddonMap > (
25
+ addons : Addons ,
26
+ options ?: { skipBrowser ?: boolean }
27
+ ) {
25
28
const test = vitest . test . extend < Fixtures < Addons > > ( { } as any ) ;
26
29
30
+ const withBrowser = ! options ?. skipBrowser ;
31
+
27
32
let create : CreateProject ;
28
33
let browser : Browser ;
29
34
30
- vitest . beforeAll ( async ( ) => {
31
- browser = await chromium . launch ( ) ;
32
- return async ( ) => {
33
- await browser . close ( ) ;
34
- } ;
35
- } ) ;
35
+ if ( withBrowser ) {
36
+ vitest . beforeAll ( async ( ) => {
37
+ browser = await chromium . launch ( ) ;
38
+ return async ( ) => {
39
+ await browser . close ( ) ;
40
+ } ;
41
+ } ) ;
42
+ }
36
43
37
44
vitest . beforeAll ( ( { name } ) => {
38
45
const testName = path . dirname ( name ) . split ( '/' ) . at ( - 1 ) ! ;
@@ -59,8 +66,11 @@ export function setupTest<Addons extends AddonMap>(addons: Addons) {
59
66
60
67
// runs before each test case
61
68
vitest . beforeEach < Fixtures < Addons > > ( async ( ctx ) => {
62
- const browserCtx = await browser . newContext ( ) ;
63
- ctx . page = await browserCtx . newPage ( ) ;
69
+ let browserCtx : BrowserContext ;
70
+ if ( withBrowser ) {
71
+ browserCtx = await browser . newContext ( ) ;
72
+ ctx . page = await browserCtx . newPage ( ) ;
73
+ }
64
74
ctx . run = async ( variant , options ) => {
65
75
const cwd = create ( { testId : ctx . task . id , variant } ) ;
66
76
@@ -81,7 +91,9 @@ export function setupTest<Addons extends AddonMap>(addons: Addons) {
81
91
} ;
82
92
83
93
return async ( ) => {
84
- await browserCtx . close ( ) ;
94
+ if ( withBrowser ) {
95
+ await browserCtx . close ( ) ;
96
+ }
85
97
// ...other tear downs
86
98
} ;
87
99
} ) ;
@@ -91,7 +103,7 @@ export function setupTest<Addons extends AddonMap>(addons: Addons) {
91
103
92
104
type PrepareServerOptions = {
93
105
cwd : string ;
94
- page : Page ;
106
+ page : Page | null ;
95
107
previewCommand ?: string ;
96
108
buildCommand ?: string ;
97
109
installCommand ?: string ;
@@ -116,6 +128,10 @@ async function prepareServer(
116
128
// build project
117
129
if ( buildCommand ) execSync ( buildCommand , { cwd, stdio : 'pipe' } ) ;
118
130
131
+ if ( ! page ) {
132
+ return { url : '' , close : ( ) => Promise . resolve ( ) } ;
133
+ }
134
+
119
135
// start preview server
120
136
const { url, close } = await startPreview ( { cwd, command : previewCommand } ) ;
121
137
0 commit comments