55 * LICENSE file in the root directory of this source tree.
66 */
77
8- import {
9- afterEach ,
10- beforeEach ,
11- describe ,
12- expect ,
13- it ,
14- vi ,
15- type MockInstance ,
16- } from 'vitest' ;
8+ import { describe , expect , it , vi } from 'vitest' ;
179import path from 'path' ;
1810import fs from 'fs-extra' ;
1911import tree from 'tree-node-cli' ;
@@ -55,38 +47,19 @@ module.exports = {
5547 ) ;
5648}
5749
58- class MockExitError extends Error {
59- constructor ( public code : number ) {
60- super ( `Exit with code ${ code } ` ) ;
61- this . code = code ;
62- }
63- }
64-
65- function createExitMock ( ) {
66- let mock : MockInstance < ( code ?: number ) => never > ;
67-
68- /* eslint-disable-next-line vitest/require-top-level-describe */
69- beforeEach ( async ( ) => {
70- mock = vi . spyOn ( process , 'exit' ) . mockImplementation ( ( code ) => {
71- throw new MockExitError ( code as number ) ;
72- } ) as MockInstance < ( code ?: number ) => never > ;
73- } ) ;
74- /* eslint-disable-next-line vitest/require-top-level-describe */
75- afterEach ( async ( ) => {
76- mock . mockRestore ( ) ;
77- } ) ;
50+ function createExitMock ( expectedExitCode : number = 0 ) {
51+ const mock = vi
52+ . spyOn ( process , 'exit' )
53+ . mockImplementation ( ( ( ) => { } ) as ( ) => never ) ;
7854
7955 return {
80- expectExitCode : ( code : number ) => {
81- expect ( mock ) . toHaveBeenCalledWith ( code ) ;
56+ [ Symbol . dispose ] : ( ) => {
57+ expect ( mock ) . toHaveBeenCalledExactlyOnceWith ( expectedExitCode ) ;
58+ mock . mockRestore ( ) ;
8259 } ,
8360 } ;
8461}
8562
86- const swizzleWithExit : typeof swizzle = async ( ...args ) => {
87- await expect ( ( ) => swizzle ( ...args ) ) . rejects . toThrow ( MockExitError ) ;
88- } ;
89-
9063async function createTestSite ( ) {
9164 const siteDir = await createTempSiteDir ( ) ;
9265
@@ -117,7 +90,7 @@ async function createTestSite() {
11790 component : string ;
11891 typescript ?: boolean ;
11992 } ) {
120- return swizzleWithExit ( FixtureThemeName , component , siteDir , {
93+ return swizzle ( FixtureThemeName , component , siteDir , {
12194 wrap : true ,
12295 danger : true ,
12396 typescript,
@@ -132,7 +105,7 @@ async function createTestSite() {
132105 component : string ;
133106 typescript ?: boolean ;
134107 } ) {
135- return swizzleWithExit ( FixtureThemeName , component , siteDir , {
108+ return swizzle ( FixtureThemeName , component , siteDir , {
136109 eject : true ,
137110 danger : true ,
138111 typescript,
@@ -150,18 +123,17 @@ async function createTestSite() {
150123}
151124
152125describe ( 'swizzle wrap' , ( ) => {
153- const exitMock = createExitMock ( ) ;
154-
155126 it ( `${ Components . FirstLevelComponent } JS` , async ( ) => {
127+ using _exitMock = createExitMock ( ) ;
156128 const { snapshotThemeDir, testWrap} = await createTestSite ( ) ;
157129 await testWrap ( {
158130 component : Components . FirstLevelComponent ,
159131 } ) ;
160- exitMock . expectExitCode ( 0 ) ;
161132 await snapshotThemeDir ( ) ;
162133 } ) ;
163134
164135 it ( `${ Components . FirstLevelComponent } TS` , async ( ) => {
136+ using _exitMock = createExitMock ( ) ;
165137 const { snapshotThemeDir, testWrap} = await createTestSite ( ) ;
166138 await testWrap ( {
167139 component : Components . FirstLevelComponent ,
@@ -171,76 +143,75 @@ describe('swizzle wrap', () => {
171143 } ) ;
172144
173145 it ( `${ Components . ComponentInFolder } JS` , async ( ) => {
146+ using _exitMock = createExitMock ( ) ;
174147 const { snapshotThemeDir, testWrap} = await createTestSite ( ) ;
175148 await testWrap ( {
176149 component : Components . ComponentInFolder ,
177150 } ) ;
178- exitMock . expectExitCode ( 0 ) ;
179151 await snapshotThemeDir ( ) ;
180152 } ) ;
181153
182154 it ( `${ Components . ComponentInFolder } TS` , async ( ) => {
155+ using _exitMock = createExitMock ( ) ;
183156 const { snapshotThemeDir, testWrap} = await createTestSite ( ) ;
184157 await testWrap ( {
185158 component : Components . ComponentInFolder ,
186159 typescript : true ,
187160 } ) ;
188- exitMock . expectExitCode ( 0 ) ;
189161 await snapshotThemeDir ( ) ;
190162 } ) ;
191163
192164 it ( `${ Components . ComponentInSubFolder } JS` , async ( ) => {
165+ using _exitMock = createExitMock ( ) ;
193166 const { snapshotThemeDir, testWrap} = await createTestSite ( ) ;
194167 await testWrap ( {
195168 component : Components . ComponentInSubFolder ,
196169 } ) ;
197- exitMock . expectExitCode ( 0 ) ;
198170 await snapshotThemeDir ( ) ;
199171 } ) ;
200172
201173 it ( `${ Components . ComponentInSubFolder } TS` , async ( ) => {
174+ using _exitMock = createExitMock ( ) ;
202175 const { snapshotThemeDir, testWrap} = await createTestSite ( ) ;
203176 await testWrap ( {
204177 component : Components . ComponentInSubFolder ,
205178 typescript : true ,
206179 } ) ;
207- exitMock . expectExitCode ( 0 ) ;
208180 await snapshotThemeDir ( ) ;
209181 } ) ;
210182
211183 it ( `${ Components . Sibling } JS` , async ( ) => {
184+ using _exitMock = createExitMock ( ) ;
212185 const { snapshotThemeDir, testWrap} = await createTestSite ( ) ;
213186 await testWrap ( {
214187 component : Components . Sibling ,
215188 } ) ;
216- exitMock . expectExitCode ( 0 ) ;
217189 await snapshotThemeDir ( ) ;
218190 } ) ;
219191
220192 it ( `${ Components . Sibling } TS` , async ( ) => {
193+ using _exitMock = createExitMock ( ) ;
221194 const { snapshotThemeDir, testWrap} = await createTestSite ( ) ;
222195 await testWrap ( {
223196 component : Components . Sibling ,
224197 typescript : true ,
225198 } ) ;
226- exitMock . expectExitCode ( 0 ) ;
227199 await snapshotThemeDir ( ) ;
228200 } ) ;
229201} ) ;
230202
231203describe ( 'swizzle eject' , ( ) => {
232- const exitMock = createExitMock ( ) ;
233-
234204 it ( `${ Components . FirstLevelComponent } JS` , async ( ) => {
205+ using _exitMock = createExitMock ( ) ;
235206 const { snapshotThemeDir, testEject} = await createTestSite ( ) ;
236207 await testEject ( {
237208 component : Components . FirstLevelComponent ,
238209 } ) ;
239- exitMock . expectExitCode ( 0 ) ;
240210 await snapshotThemeDir ( ) ;
241211 } ) ;
242212
243213 it ( `${ Components . FirstLevelComponent } TS` , async ( ) => {
214+ using _exitMock = createExitMock ( ) ;
244215 const { snapshotThemeDir, testEject} = await createTestSite ( ) ;
245216 await testEject ( {
246217 component : Components . FirstLevelComponent ,
@@ -250,59 +221,59 @@ describe('swizzle eject', () => {
250221 } ) ;
251222
252223 it ( `${ Components . ComponentInFolder } JS` , async ( ) => {
224+ using _exitMock = createExitMock ( ) ;
253225 const { snapshotThemeDir, testEject} = await createTestSite ( ) ;
254226 await testEject ( {
255227 component : Components . ComponentInFolder ,
256228 } ) ;
257- exitMock . expectExitCode ( 0 ) ;
258229 await snapshotThemeDir ( ) ;
259230 } ) ;
260231
261232 it ( `${ Components . ComponentInFolder } TS` , async ( ) => {
233+ using _exitMock = createExitMock ( ) ;
262234 const { snapshotThemeDir, testEject} = await createTestSite ( ) ;
263235 await testEject ( {
264236 component : Components . ComponentInFolder ,
265237 typescript : true ,
266238 } ) ;
267- exitMock . expectExitCode ( 0 ) ;
268239 await snapshotThemeDir ( ) ;
269240 } ) ;
270241
271242 it ( `${ Components . ComponentInSubFolder } JS` , async ( ) => {
243+ using _exitMock = createExitMock ( ) ;
272244 const { snapshotThemeDir, testEject} = await createTestSite ( ) ;
273245 await testEject ( {
274246 component : Components . ComponentInSubFolder ,
275247 } ) ;
276- exitMock . expectExitCode ( 0 ) ;
277248 await snapshotThemeDir ( ) ;
278249 } ) ;
279250
280251 it ( `${ Components . ComponentInSubFolder } TS` , async ( ) => {
252+ using _exitMock = createExitMock ( ) ;
281253 const { snapshotThemeDir, testEject} = await createTestSite ( ) ;
282254 await testEject ( {
283255 component : Components . ComponentInSubFolder ,
284256 typescript : true ,
285257 } ) ;
286- exitMock . expectExitCode ( 0 ) ;
287258 await snapshotThemeDir ( ) ;
288259 } ) ;
289260
290261 it ( `${ Components . Sibling } JS` , async ( ) => {
262+ using _exitMock = createExitMock ( ) ;
291263 const { snapshotThemeDir, testEject} = await createTestSite ( ) ;
292264 await testEject ( {
293265 component : Components . Sibling ,
294266 } ) ;
295- exitMock . expectExitCode ( 0 ) ;
296267 await snapshotThemeDir ( ) ;
297268 } ) ;
298269
299270 it ( `${ Components . Sibling } TS` , async ( ) => {
271+ using _exitMock = createExitMock ( ) ;
300272 const { snapshotThemeDir, testEject} = await createTestSite ( ) ;
301273 await testEject ( {
302274 component : Components . Sibling ,
303275 typescript : true ,
304276 } ) ;
305- exitMock . expectExitCode ( 0 ) ;
306277 await snapshotThemeDir ( ) ;
307278 } ) ;
308279} ) ;
0 commit comments