@@ -122,17 +122,44 @@ export default (browserServer: BrowserServer, base = '/'): Plugin[] => {
122
122
define [ `import.meta.env.${ env } ` ] = stringValue
123
123
}
124
124
125
+ const entries : string [ ] = [
126
+ ...browserTestFiles ,
127
+ ...setupFiles ,
128
+ resolve ( vitestDist , 'index.js' ) ,
129
+ resolve ( vitestDist , 'browser.js' ) ,
130
+ resolve ( vitestDist , 'runners.js' ) ,
131
+ resolve ( vitestDist , 'utils.js' ) ,
132
+ ...( project . config . snapshotSerializers || [ ] ) ,
133
+ ]
134
+
135
+ if ( project . config . diff ) {
136
+ entries . push ( project . config . diff )
137
+ }
138
+
139
+ if ( project . ctx . coverageProvider ) {
140
+ const coverage = project . ctx . config . coverage
141
+ const provider = coverage . provider
142
+ if ( provider === 'v8' ) {
143
+ const path = tryResolve ( '@vitest/coverage-v8' , [ project . ctx . config . root ] )
144
+ if ( path ) {
145
+ entries . push ( path )
146
+ }
147
+ }
148
+ else if ( provider === 'istanbul' ) {
149
+ const path = tryResolve ( '@vitest/coverage-istanbul' , [ project . ctx . config . root ] )
150
+ if ( path ) {
151
+ entries . push ( path )
152
+ }
153
+ }
154
+ else if ( provider === 'custom' && coverage . customProviderModule ) {
155
+ entries . push ( coverage . customProviderModule )
156
+ }
157
+ }
158
+
125
159
return {
126
160
define,
127
161
optimizeDeps : {
128
- entries : [
129
- ...browserTestFiles ,
130
- ...setupFiles ,
131
- resolve ( vitestDist , 'index.js' ) ,
132
- resolve ( vitestDist , 'browser.js' ) ,
133
- resolve ( vitestDist , 'runners.js' ) ,
134
- resolve ( vitestDist , 'utils.js' ) ,
135
- ] ,
162
+ entries,
136
163
exclude : [
137
164
'vitest' ,
138
165
'vitest/utils' ,
@@ -163,6 +190,7 @@ export default (browserServer: BrowserServer, base = '/'): Plugin[] => {
163
190
'vitest > chai > loupe' ,
164
191
'vitest > @vitest/runner > p-limit' ,
165
192
'vitest > @vitest/utils > diff-sequences' ,
193
+ 'vitest > @vitest/utils > loupe' ,
166
194
'@vitest/browser > @testing-library/user-event' ,
167
195
'@vitest/browser > @testing-library/dom' ,
168
196
] ,
@@ -235,10 +263,9 @@ export default (browserServer: BrowserServer, base = '/'): Plugin[] => {
235
263
enforce : 'post' ,
236
264
async config ( viteConfig ) {
237
265
// Enables using ignore hint for coverage providers with @preserve keyword
238
- if ( viteConfig . esbuild !== false ) {
239
- viteConfig . esbuild ||= { }
240
- viteConfig . esbuild . legalComments = 'inline'
241
- }
266
+ viteConfig . esbuild ||= { }
267
+ viteConfig . esbuild . legalComments = 'inline'
268
+
242
269
const server = resolveApiServerConfig (
243
270
viteConfig . test ?. browser || { } ,
244
271
defaultBrowserPort ,
@@ -294,8 +321,8 @@ export default (browserServer: BrowserServer, base = '/'): Plugin[] => {
294
321
{
295
322
name : 'test-utils-rewrite' ,
296
323
setup ( build ) {
297
- const _require = createRequire ( import . meta. url )
298
324
build . onResolve ( { filter : / @ v u e \/ t e s t - u t i l s / } , ( args ) => {
325
+ const _require = getRequire ( )
299
326
// resolve to CJS instead of the browser because the browser version expects a global Vue object
300
327
const resolved = _require . resolve ( args . path , {
301
328
paths : [ args . importer ] ,
@@ -313,6 +340,24 @@ export default (browserServer: BrowserServer, base = '/'): Plugin[] => {
313
340
]
314
341
}
315
342
343
+ function tryResolve ( path : string , paths : string [ ] ) {
344
+ try {
345
+ const _require = getRequire ( )
346
+ return _require . resolve ( path , { paths } )
347
+ }
348
+ catch {
349
+ return undefined
350
+ }
351
+ }
352
+
353
+ let _require : NodeRequire
354
+ function getRequire ( ) {
355
+ if ( ! _require ) {
356
+ _require = createRequire ( import . meta. url )
357
+ }
358
+ return _require
359
+ }
360
+
316
361
function resolveCoverageFolder ( project : WorkspaceProject ) {
317
362
const options = project . ctx . config
318
363
const htmlReporter = options . coverage ?. enabled
0 commit comments