Configuring Vitest
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.configwill be ignored - Pass
--configoption to CLI, e.g.vitest --config ./path/to/vitest.config.ts - Use
process.env.VITESTormodeproperty ondefineConfig(will be set totest/benchmarkif not overridden with--mode) to conditionally apply different configuration invite.config.ts. Note that like any other environment variable,VITESTis also exposed onimport.meta.envin your tests
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.
If you are not using vite, add defineConfig imported from vitest/config to your config file:
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
// ... Specify options here.
},
})If you have a vite config already, you can add /// <reference types="vitest/config" /> to include the test types:
/// <reference types="vitest/config" />
import { defineConfig } from 'vite'
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/*'],
},
})
))Since Vitest uses Vite config, you can also use any configuration option from Vite. For example, define to define global variables, or resolve.alias to define aliases - these options should be defined on the top level, not within a test property.
Configuration options that are not supported inside a project config have icon next to them. This means they can only be set in the root Vitest config.