[READ-ONLY] Mirror of https://github.com/vitest-dev/vitest. Next generation testing framework powered by Vite. vitest.dev
test testing-tools vite
12

Configure Feed

Select the types of activity you want to include in your feed.

fix(vitest): always inline setup files (#6689)

authored by

Vladimir and committed by
GitHub
(Oct 11, 2024, 5:03 PM +0200) 19d64e20 47dde76f

+70 -21
+1
vitest.workspace.vscode.ts
··· 3 3 export default defineWorkspace([ 4 4 './test/core', 5 5 './test/cli', 6 + './test/config', 6 7 ])
+1
packages/vite-node/src/cli.ts
··· 182 182 ...serverOptions, 183 183 deps: { 184 184 ...serverOptions.deps, 185 + inlineFiles: toArray(serverOptions.deps?.inlineFiles), 185 186 inline: 186 187 inlineOptions !== true 187 188 ? inlineOptions.map((dep) => {
+3
packages/vite-node/src/externalize.ts
··· 119 119 if (matchExternalizePattern(id, moduleDirectories, options?.inline)) { 120 120 return false 121 121 } 122 + if (options?.inlineFiles && options?.inlineFiles.includes(id)) { 123 + return false 124 + } 122 125 if (matchExternalizePattern(id, moduleDirectories, options?.external)) { 123 126 return id 124 127 }
+11
packages/vite-node/src/server.ts
··· 1 1 import { performance } from 'node:perf_hooks' 2 2 import { existsSync } from 'node:fs' 3 3 import assert from 'node:assert' 4 + import { pathToFileURL } from 'node:url' 4 5 import { join, normalize, relative, resolve } from 'pathe' 5 6 import type { TransformResult, ViteDevServer } from 'vite' 6 7 import createDebug from 'debug' ··· 103 104 } 104 105 if (options.debug) { 105 106 this.debugger = new Debugger(server.config.root, options.debug!) 107 + } 108 + 109 + if (options.deps.inlineFiles) { 110 + options.deps.inlineFiles = options.deps.inlineFiles.flatMap((file) => { 111 + if (file.startsWith('file://')) { 112 + return file 113 + } 114 + const resolvedId = resolve(file) 115 + return [resolvedId, pathToFileURL(resolvedId).href] 116 + }) 106 117 } 107 118 108 119 options.deps.moduleDirectories ??= []
+1
packages/vite-node/src/types.ts
··· 9 9 export interface DepsHandlingOptions { 10 10 external?: (string | RegExp)[] 11 11 inline?: (string | RegExp)[] | true 12 + inlineFiles?: string[] 12 13 /** 13 14 * A list of directories that are considered to hold Node.js modules 14 15 * Have to include "/" at the start and end of the path
+11
test/config/test/inline-setup-file.test.ts
··· 1 + import path from 'node:path' 2 + import { expect, test } from 'vitest' 3 + import { runVitest } from '../../test-utils' 4 + 5 + test('import a generated file', async () => { 6 + const root = path.resolve(import.meta.dirname, '../fixtures/inline-setup-file') 7 + 8 + const { stderr, exitCode } = await runVitest({ root }) 9 + expect(stderr).toBe('') 10 + expect(exitCode).toBe(0) 11 + })
+3
test/config/fixtures/inline-setup-file/file-setup.js
··· 1 + if (typeof __vite_ssr_import__ === 'undefined') { 2 + throw new Error('Setup file was externalized') 3 + }
+3
test/config/fixtures/inline-setup-file/test.test.js
··· 1 + import { test } from 'vitest' 2 + 3 + test('test', () => {})
+13
test/config/fixtures/inline-setup-file/vitest.config.js
··· 1 + import { defineConfig } from 'vitest/config'; 2 + 3 + export default defineConfig({ 4 + test: { 5 + setupFiles: ['./file-setup'], 6 + server: { 7 + deps: { 8 + // try to force setup file to be external 9 + external: [/file-setup/] 10 + } 11 + } 12 + } 13 + })
+23 -21
packages/vitest/src/node/config/resolveConfig.ts
··· 307 307 resolved.deps.web.transformCss ??= true 308 308 resolved.deps.web.transformGlobPattern ??= [] 309 309 310 + resolved.setupFiles = toArray(resolved.setupFiles || []).map(file => 311 + resolvePath(file, resolved.root), 312 + ) 313 + resolved.globalSetup = toArray(resolved.globalSetup || []).map(file => 314 + resolvePath(file, resolved.root), 315 + ) 316 + resolved.coverage.exclude.push( 317 + ...resolved.setupFiles.map( 318 + file => 319 + `${resolved.coverage.allowExternal ? '**/' : ''}${relative( 320 + resolved.root, 321 + file, 322 + )}`, 323 + ), 324 + ) 325 + 326 + resolved.forceRerunTriggers = [ 327 + ...resolved.forceRerunTriggers, 328 + ...resolved.setupFiles, 329 + ] 330 + 310 331 resolved.server ??= {} 311 332 resolved.server.deps ??= {} 312 333 ··· 366 387 } 367 388 } 368 389 390 + resolved.server.deps.inlineFiles ??= [] 391 + resolved.server.deps.inlineFiles.push(...resolved.setupFiles) 369 392 resolved.server.deps.moduleDirectories ??= [] 370 393 resolved.server.deps.moduleDirectories.push( 371 394 ...resolved.deps.moduleDirectories, ··· 553 576 resolved.benchmark.outputJson = options.outputJson 554 577 } 555 578 } 556 - 557 - resolved.setupFiles = toArray(resolved.setupFiles || []).map(file => 558 - resolvePath(file, resolved.root), 559 - ) 560 - resolved.globalSetup = toArray(resolved.globalSetup || []).map(file => 561 - resolvePath(file, resolved.root), 562 - ) 563 - resolved.coverage.exclude.push( 564 - ...resolved.setupFiles.map( 565 - file => 566 - `${resolved.coverage.allowExternal ? '**/' : ''}${relative( 567 - resolved.root, 568 - file, 569 - )}`, 570 - ), 571 - ) 572 - 573 - resolved.forceRerunTriggers = [ 574 - ...resolved.forceRerunTriggers, 575 - ...resolved.setupFiles, 576 - ] 577 579 578 580 if (resolved.diff) { 579 581 resolved.diff = resolvePath(resolved.diff, resolved.root)