Skip to content

Commit c0e68da

Browse files
authored
test: convert config playground to unit tests (#19568)
1 parent db5fb48 commit c0e68da

File tree

16 files changed

+179
-181
lines changed

16 files changed

+179
-181
lines changed

packages/vite/src/node/__tests__/config.spec.ts

+162-90
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,13 @@ import { defineConfig, loadConfigFromFile, resolveConfig } from '../config'
88
import { resolveEnvPrefix } from '../env'
99
import { createLogger, mergeConfig } from '../publicUtils'
1010

11+
const [nvMajor, nvMinor] = process.versions.node.split('.').map(Number)
12+
const isImportAttributesSupported =
13+
(nvMajor === 18 && nvMinor >= 20) ||
14+
// Node v19 doesn't support import attributes
15+
(nvMajor === 20 && nvMinor >= 10) ||
16+
nvMajor >= 21
17+
1118
describe('mergeConfig', () => {
1219
test('handles configs with different alias schemas', () => {
1320
const baseConfig = defineConfig({
@@ -611,101 +618,166 @@ test('preTransformRequests', async () => {
611618
})
612619

613620
describe('loadConfigFromFile', () => {
614-
const root = path.resolve(__dirname, './fixtures/config/loadConfigFromFile')
621+
const fixtures = path.resolve(__dirname, './fixtures/config')
622+
623+
describe('load default files', () => {
624+
const root = path.resolve(fixtures, './loadConfigFromFile')
625+
626+
let writtenConfig: string | undefined
627+
afterEach(() => {
628+
if (writtenConfig) {
629+
fs.unlinkSync(path.resolve(root, writtenConfig))
630+
}
631+
fs.unlinkSync(path.resolve(root, 'package.json'))
632+
})
615633

616-
let writtenConfig: string | undefined
617-
afterEach(() => {
618-
if (writtenConfig) {
619-
fs.unlinkSync(path.resolve(root, writtenConfig))
634+
const writeConfig = (fileName: string, content: string) => {
635+
fs.writeFileSync(path.resolve(root, fileName), content)
636+
writtenConfig = fileName
637+
}
638+
const writePackageJson = (typeField: string | undefined) => {
639+
fs.writeFileSync(
640+
path.resolve(root, 'package.json'),
641+
JSON.stringify({
642+
name: '@vitejs/test-load-config-from-file',
643+
type: typeField,
644+
}),
645+
)
620646
}
621-
fs.unlinkSync(path.resolve(root, 'package.json'))
622-
})
623647

624-
const writeConfig = (fileName: string, content: string) => {
625-
fs.writeFileSync(path.resolve(root, fileName), content)
626-
writtenConfig = fileName
627-
}
628-
const writePackageJson = (typeField: string | undefined) => {
629-
fs.writeFileSync(
630-
path.resolve(root, 'package.json'),
631-
JSON.stringify({
632-
name: '@vitejs/test-load-config-from-file',
633-
type: typeField,
634-
}),
635-
)
636-
}
648+
const canLoadConfig = async () => {
649+
const result = await loadConfigFromFile(
650+
{ command: 'build', mode: 'production' },
651+
undefined,
652+
root,
653+
)
654+
expect(result).toBeTruthy()
655+
expect(result?.config).toStrictEqual({ define: { foo: 1 } })
656+
expect(path.normalize(result!.path)).toBe(
657+
path.resolve(root, writtenConfig!),
658+
)
659+
}
637660

638-
const canLoadConfig = async () => {
639-
const result = await loadConfigFromFile(
640-
{ command: 'build', mode: 'production' },
641-
undefined,
642-
root,
643-
)
644-
expect(result).toBeTruthy()
645-
expect(result?.config).toStrictEqual({ define: { foo: 1 } })
646-
expect(path.normalize(result!.path)).toBe(
647-
path.resolve(root, writtenConfig!),
648-
)
649-
}
661+
const cases = [
662+
{
663+
fileName: 'vite.config.js',
664+
content: 'export default { define: { foo: 1 } }',
665+
},
666+
{
667+
fileName: 'vite.config.js',
668+
content: 'export default { define: { foo: 1 } }',
669+
},
670+
{
671+
fileName: 'vite.config.cjs',
672+
content: 'module.exports = { define: { foo: 1 } }',
673+
},
674+
{
675+
fileName: 'vite.config.cjs',
676+
content: 'module.exports = { define: { foo: 1 } }',
677+
},
678+
{
679+
fileName: 'vite.config.mjs',
680+
content: 'export default { define: { foo: 1 } }',
681+
},
682+
{
683+
fileName: 'vite.config.mjs',
684+
content: 'export default { define: { foo: 1 } }',
685+
},
686+
{
687+
fileName: 'vite.config.ts',
688+
content: 'export default { define: { foo: 1 as number } }',
689+
},
690+
{
691+
fileName: 'vite.config.ts',
692+
content: 'export default { define: { foo: 1 as number } }',
693+
},
694+
{
695+
fileName: 'vite.config.mts',
696+
content: 'export default { define: { foo: 1 as number } }',
697+
},
698+
{
699+
fileName: 'vite.config.mts',
700+
content: 'export default { define: { foo: 1 as number } }',
701+
},
702+
{
703+
fileName: 'vite.config.cts',
704+
content: 'module.exports = { define: { foo: 1 as number } }',
705+
},
706+
{
707+
fileName: 'vite.config.cts',
708+
content: 'module.exports = { define: { foo: 1 as number } }',
709+
},
710+
]
650711

651-
const cases = [
652-
{
653-
fileName: 'vite.config.js',
654-
content: 'export default { define: { foo: 1 } }',
655-
},
656-
{
657-
fileName: 'vite.config.js',
658-
content: 'export default { define: { foo: 1 } }',
659-
},
660-
{
661-
fileName: 'vite.config.cjs',
662-
content: 'module.exports = { define: { foo: 1 } }',
663-
},
664-
{
665-
fileName: 'vite.config.cjs',
666-
content: 'module.exports = { define: { foo: 1 } }',
667-
},
668-
{
669-
fileName: 'vite.config.mjs',
670-
content: 'export default { define: { foo: 1 } }',
671-
},
672-
{
673-
fileName: 'vite.config.mjs',
674-
content: 'export default { define: { foo: 1 } }',
675-
},
676-
{
677-
fileName: 'vite.config.ts',
678-
content: 'export default { define: { foo: 1 as number } }',
679-
},
680-
{
681-
fileName: 'vite.config.ts',
682-
content: 'export default { define: { foo: 1 as number } }',
683-
},
684-
{
685-
fileName: 'vite.config.mts',
686-
content: 'export default { define: { foo: 1 as number } }',
687-
},
688-
{
689-
fileName: 'vite.config.mts',
690-
content: 'export default { define: { foo: 1 as number } }',
691-
},
692-
{
693-
fileName: 'vite.config.cts',
694-
content: 'module.exports = { define: { foo: 1 as number } }',
695-
},
696-
{
697-
fileName: 'vite.config.cts',
698-
content: 'module.exports = { define: { foo: 1 as number } }',
712+
for (const { fileName, content } of cases) {
713+
for (const typeField of [undefined, 'module']) {
714+
test(`load ${fileName}${typeField ? ' with package#type module' : ''}`, async () => {
715+
writePackageJson(typeField)
716+
writeConfig(fileName, content)
717+
await canLoadConfig()
718+
})
719+
}
720+
}
721+
})
722+
723+
test('can import values', async () => {
724+
const { config } = (await loadConfigFromFile(
725+
{} as any,
726+
path.resolve(fixtures, './entry/vite.config.ts'),
727+
path.resolve(fixtures, './entry'),
728+
))!
729+
expect(config).toMatchInlineSnapshot(`
730+
{
731+
"array": [
732+
[
733+
1,
734+
3,
735+
],
736+
[
737+
2,
738+
4,
739+
],
740+
],
741+
"importsField": "imports-field",
742+
"moduleCondition": "import condition",
743+
}
744+
`)
745+
})
746+
747+
test.runIf(isImportAttributesSupported)(
748+
'loadConfigFromFile with import attributes',
749+
async () => {
750+
const { config } = (await loadConfigFromFile(
751+
{} as any,
752+
path.resolve(fixtures, './entry/vite.config.import-attributes.ts'),
753+
path.resolve(fixtures, './entry'),
754+
))!
755+
expect(config).toMatchInlineSnapshot(`
756+
{
757+
"jsonValue": "vite",
758+
}
759+
`)
699760
},
700-
]
761+
)
701762

702-
for (const { fileName, content } of cases) {
703-
for (const typeField of [undefined, 'module']) {
704-
test(`load ${fileName}${typeField ? ' with package#type module' : ''}`, async () => {
705-
writePackageJson(typeField)
706-
writeConfig(fileName, content)
707-
await canLoadConfig()
708-
})
709-
}
710-
}
763+
describe('loadConfigFromFile with configLoader: native', () => {
764+
const fixtureRoot = path.resolve(fixtures, './native-import')
765+
766+
test('imports a basic js config', async () => {
767+
const result = (await loadConfigFromFile(
768+
{} as any,
769+
path.resolve(fixtureRoot, 'basic.js'),
770+
fixtureRoot,
771+
undefined,
772+
undefined,
773+
'native',
774+
))!
775+
expect(result.config).toMatchInlineSnapshot(`
776+
{
777+
"value": "works",
778+
}
779+
`)
780+
expect(result.dependencies.length).toBe(0)
781+
})
782+
})
711783
})

playground/config/__tests__/config.spec.ts

-71
This file was deleted.

playground/config/__tests__/serve.ts

-3
This file was deleted.

pnpm-lock.yaml

+17-17
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)