Skip to content

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 from vite.config.ts (Vitest supports all conventional JS and TS extensions, but doesn't support json) - it means all options in your vite.config will be ignored
  • Pass --config option to CLI, e.g. vitest --config ./path/to/vitest.config.ts
  • Use process.env.VITEST or mode property on defineConfig (will be set to test/benchmark if not overridden with --mode) to conditionally apply different configuration in vite.config.ts. Note that like any other environment variable, VITEST is also exposed on import.meta.env in 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:

vitest.config.js
js
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:

vite.config.js
js
/// <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:

vitest.config.js
js
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:

vitest.config.js
js
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:

vitest.config.js
js
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.

Released under the MIT License.