Managing Vitest config file
If you are using Vite and have a vite.config
file, Vitest will read it to match with the plugins and setup as your Vite app. If you want to have a different configuration for testing or your main app doesn't rely on Vite specifically, you could either:
- Create
vitest.config.ts
, which will have the higher priority and will override the configuration fromvite.config.ts
(Vitest supports all conventional JS and TS extensions, but doesn't supportjson
) - it means all options in yourvite.config
will be ignored - Pass
--config
option to CLI, e.g.vitest --config ./path/to/vitest.config.ts
- Use
process.env.VITEST
ormode
property ondefineConfig
(will be set totest
/benchmark
if not overridden with--mode
) to conditionally apply different configuration invite.config.ts
To configure vitest
itself, add test
property in your Vite config. You'll also need to add a reference to Vitest types using a triple slash command at the top of your config file, if you are importing defineConfig
from vite
itself.
Using defineConfig
from vite
you should follow this:
/// <reference types="vitest" />
import { defineConfig } from 'vite'
export default defineConfig({
test: {
// ... Specify options here.
},
})
The <reference types="vitest" />
will stop working in Vitest 3, but you can start migrating to vitest/config
in Vitest 2.1:
/// <reference types="vitest/config" />
import { defineConfig } from 'vite'
export default defineConfig({
test: {
// ... Specify options here.
},
})
Using defineConfig
from vitest/config
you should follow this:
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
// ... Specify options here.
},
})
You can retrieve Vitest's default options to expand them if needed:
import { configDefaults, defineConfig } from 'vitest/config'
export default defineConfig({
test: {
exclude: [...configDefaults.exclude, 'packages/template/*'],
},
})
When using a separate vitest.config.js
, you can also extend Vite's options from another config file if needed:
import { defineConfig, mergeConfig } from 'vitest/config'
import viteConfig from './vite.config'
export default mergeConfig(viteConfig, defineConfig({
test: {
exclude: ['packages/template/*'],
},
}))
If your Vite config is defined as a function, you can define the config like this:
import { defineConfig, mergeConfig } from 'vitest/config'
import viteConfig from './vite.config'
export default defineConfig(configEnv => mergeConfig(
viteConfig(configEnv),
defineConfig({
test: {
exclude: ['packages/template/*'],
},
})
))