@@ -2,7 +2,7 @@ import { fileURLToPath } from 'node:url'
2
2
import path from 'node:path'
3
3
import fs from 'node:fs'
4
4
import { stripVTControlCharacters } from 'node:util'
5
- import { expect , test } from 'vitest'
5
+ import { expect , onTestFinished , test , vi } from 'vitest'
6
6
import { createServer } from '../../server'
7
7
import { normalizePath } from '../../utils'
8
8
@@ -251,3 +251,44 @@ test('file url', async () => {
251
251
)
252
252
expect ( modWithSpace . msg ) . toBe ( 'works' )
253
253
} )
254
+
255
+ test ( 'plugin error' , async ( ) => {
256
+ const server = await createServer ( {
257
+ configFile : false ,
258
+ root,
259
+ logLevel : 'error' ,
260
+ plugins : [
261
+ {
262
+ name : 'test-plugin' ,
263
+ resolveId ( source ) {
264
+ if ( source === 'virtual:test' ) {
265
+ return '\0' + source
266
+ }
267
+ } ,
268
+ load ( id ) {
269
+ if ( id === '\0virtual:test' ) {
270
+ return this . error ( 'test-error' )
271
+ }
272
+ } ,
273
+ } ,
274
+ ] ,
275
+ } )
276
+ onTestFinished ( ( ) => server . close ( ) )
277
+
278
+ const spy = vi
279
+ . spyOn ( server . config . logger , 'error' )
280
+ . mockImplementation ( ( ) => { } )
281
+ try {
282
+ await server . ssrLoadModule ( 'virtual:test' )
283
+ expect . unreachable ( )
284
+ } catch { }
285
+ expect (
286
+ stripVTControlCharacters ( spy . mock . lastCall ! [ 0 ] )
287
+ . split ( '\n' )
288
+ . slice ( 0 , 2 )
289
+ . join ( '\n' ) ,
290
+ ) . toMatchInlineSnapshot ( `
291
+ "Error when evaluating SSR module virtual:test: test-error
292
+ Plugin: test-plugin"
293
+ ` )
294
+ } )
0 commit comments