1
1
import { TransformResult } from 'vite'
2
2
import { expect , describe , it } from 'vitest'
3
3
import { definePageTransform , extractDefinePageNameAndPath } from './definePage'
4
+ import { mockWarn } from '../../tests/vitest-mock-warn'
4
5
5
6
const sampleCode = `
6
7
<script setup>
@@ -18,6 +19,7 @@ const b = 1
18
19
`
19
20
20
21
describe ( 'definePage' , ( ) => {
22
+ mockWarn ( )
21
23
it ( 'removes definePage' , async ( ) => {
22
24
const result = ( await definePageTransform ( {
23
25
code : sampleCode ,
@@ -256,8 +258,7 @@ export default {
256
258
} )
257
259
258
260
describe ( 'error handling' , ( ) => {
259
- it ( 'handles syntax errors gracefully when extracting definePage' , async ( ) => {
260
- const codeWithSyntaxError = `
261
+ const codeWithSyntaxError = `
261
262
<script setup>
262
263
definePage({
263
264
name: 'test',, // syntax error: extra comma
@@ -270,17 +271,19 @@ definePage({
270
271
</template>
271
272
`
272
273
274
+ it ( 'handles syntax errors gracefully when extracting definePage' , async ( ) => {
273
275
const result = await definePageTransform ( {
274
276
code : codeWithSyntaxError ,
275
277
id : 'src/pages/broken.vue?definePage&vue' ,
276
278
} )
277
279
278
280
// Should return empty object instead of crashing
279
281
expect ( result ) . toBe ( 'export default {}' )
282
+ expect ( 'Failed to process definePage:' ) . toHaveBeenWarned ( )
280
283
} )
281
284
282
285
it ( 'handles syntax errors gracefully when removing definePage from source' , async ( ) => {
283
- const codeWithSyntaxError = `
286
+ const codeForRemoval = `
284
287
<script setup>
285
288
const a = 1
286
289
definePage({
@@ -296,68 +299,24 @@ const b = 1
296
299
`
297
300
298
301
const result = await definePageTransform ( {
299
- code : codeWithSyntaxError ,
302
+ code : codeForRemoval ,
300
303
id : 'src/pages/broken.vue' ,
301
304
} )
302
305
303
306
// Should return undefined (no transform) instead of crashing
304
307
expect ( result ) . toBeUndefined ( )
305
- } )
306
-
307
- it ( 'handles malformed definePage object gracefully' , async ( ) => {
308
- const codeWithMalformedObject = `
309
- <script setup>
310
- definePage({
311
- name: 'test'
312
- path: '/test' // missing comma
313
- })
314
- </script>
315
- `
316
-
317
- const result = await definePageTransform ( {
318
- code : codeWithMalformedObject ,
319
- id : 'src/pages/malformed.vue?definePage&vue' ,
320
- } )
321
-
322
- expect ( result ) . toBe ( 'export default {}' )
323
- } )
324
-
325
- it ( 'handles completely invalid JavaScript syntax gracefully' , async ( ) => {
326
- const codeWithInvalidSyntax = `
327
- <script setup>
328
- definePage({
329
- name: 'test',
330
- path: '/test'
331
- invalid javascript syntax here ###
332
- })
333
- </script>
334
- `
335
-
336
- const result = await definePageTransform ( {
337
- code : codeWithInvalidSyntax ,
338
- id : 'src/pages/invalid.vue?definePage&vue' ,
339
- } )
340
-
341
- expect ( result ) . toBe ( 'export default {}' )
308
+ expect ( 'Failed to process definePage:' ) . toHaveBeenWarned ( )
342
309
} )
343
310
344
311
it ( 'handles extractDefinePageNameAndPath with syntax errors gracefully' , async ( ) => {
345
- const codeWithSyntaxError = `
346
- <script setup>
347
- definePage({
348
- name: 'test',, // syntax error: extra comma
349
- path: '/test'
350
- })
351
- </script>
352
- `
353
-
354
312
const result = await extractDefinePageNameAndPath (
355
313
codeWithSyntaxError ,
356
314
'src/pages/broken.vue'
357
315
)
358
316
359
317
// Should return null/undefined instead of crashing
360
318
expect ( result ) . toBeUndefined ( )
319
+ expect ( 'Failed to extract definePage info:' ) . toHaveBeenWarned ( )
361
320
} )
362
321
363
322
it ( 'handles unclosed brackets in definePage gracefully' , async ( ) => {
@@ -376,6 +335,7 @@ definePage({
376
335
} )
377
336
378
337
expect ( result ) . toBe ( 'export default {}' )
338
+ expect ( 'Failed to process definePage:' ) . toHaveBeenWarned ( )
379
339
} )
380
340
} )
381
341
} )
0 commit comments