Getting Started

WARNING

Vitest is still in development and it isn't stable.
It's not recommended to migrate your current testing setups yet.
You can try it out in new projects if you are willing to get involved and help.

Overview

Vitest is a blazing fast unit test framework powered by Vite.

You can learn more about the rationale behind the project in the Why Vitest section.

Trying Vitest Online

You can try Vitest online on StackBlitz. It runs Vitest directly in the browser, and it is almost identical to the local setup but doesn't require installing anything on your machine.

Adding Vitest to your Project

// with npm
$ npm install -D vitest

// or with yarn
$ yarn add -D vitest

// or with pnpm
$ pnpm add -D vitest

TIP

Vitest requires Vite >=v2.7.10 and Node >=v14

Configuring Vitest

One of the main advantages of Vitest is its unified configuration with Vite. If present, vitest will read your root vite.config.ts to match with the plugins and setup as your Vite app. For example, your Vite resolve.alias and plugins configuration will work out-of-the-box. If you want a different configuration during testing, you can:

  • Create vitest.config.ts, which will have the higher priority
  • Pass --config option to CLI, e.g. vitest --config ./path/to/vitest.config.ts
  • Use process.env.VITEST to conditionally apply different configuration in vite.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.

/// <reference types="vitest" />
import { defineConfig } from 'vite'

export default defineConfig({
  test: {
    // ...
  },
})

See the list of config options in the Config Reference

Command Line Interface

In a project where Vitest is installed, you can use the vitest binary in your npm scripts, or run it directly with npx vitest. Here are the default npm scripts in a scaffolded Vitest project:

{
  "scripts": {
    "test": "vitest",
    "coverage": "vitest run --coverage"
  }
}

To run tests once without watching for file changes, use vitest run. You can specify additional CLI options like --port or --https. For a full list of CLI options, run npx vitest --help in your project.

Commands

  • vitest watch

    Run all test suites but watch for changes and rerun tests when they change. Same as calling vitest without a command. In CI environments this command will fallback to vitest run

  • vitest run

    Perform a single run without watch mode.

  • vitest dev

    Run vitest in development mode.

  • vitest related

    Run only tests that cover a list of source files. Works with static lazy imports, but not the dynamic ones. All files should be relative to root folder.

    Useful to run with lint-staged or with your CI setup.

    vitest related /src/index.ts /src/hello-world.js
    

Options

Options
-v, --versionDisplay version number
-r, --root <path>Define the project root
-c, --config <path>Path to config file
-u, --updateUpdate snapshots
-w, --watchWatch mode
-t, --testNamePattern <pattern>Run tests with names matching the pattern
--uiEnable UI
--openOpen the UI automatically if enabled (default: true)
--api [api]Serve API, available options: --api.port <port>, --api.host [host] and --api.strictPort
--threadsEnable Threads (default: true)
--silentSilent console output from tests
--reporter <name>Select reporter: default, verbose, dot or json
--outputFile <filename>Write test results to a file when the --reporter=json option is also specified
--coverageUse c8 for coverage
--runDo not watch
--globalInject APIs globally
--domMock browser api with happy-dom
--environment <env>Runner environment (default: node)
--passWithNoTestsPass when no tests found
--allowOnlyAllow tests and suites that are marked as only (default: false in CI, true otherwise)
-h, --helpDisplay available CLI options

Examples

ExampleSourcePlayground
basicGitHubPlay Online
cjsGitHubPlay Online
coverage-testGitHubPlay Online
failsGitHubPlay Online
litGitHubPlay Online
mocksGitHubPlay Online
puppeteerGitHubPlay Online
reactGitHubPlay Online
react-enzymeGitHubPlay Online
react-muiGitHubPlay Online
react-storybook-testingGitHubPlay Online
react-testing-libGitHubPlay Online
react-testing-lib-mswGitHubPlay Online
relatedGitHubPlay Online
rubyGitHubPlay Online
single-threadGitHubPlay Online
svelteGitHubPlay Online
testing-lib-reactGitHubPlay Online
testing-library-jest-domGitHubPlay Online
vitesseGitHubPlay Online
vueGitHubPlay Online
vue-jsxGitHubPlay Online
vue2GitHubPlay Online

Projects using Vitest

Using Unreleased Commits

If you can't wait for a new release to test the latest features, you will need to clone the vitest repo to your local machine and then build and link it yourself (pnpm is required):

git clone https://github.com/vitest-dev/vitest.git
cd vitest
pnpm install
cd packages/vitest
pnpm run build
pnpm link --global # you can use your preferred package manager for this step

Then go to the project where you are using Vitest and run pnpm link --global vitest (or the package manager that you used to link vitest globally).

Community

If you have questions or need help, reach out to the community at Discord and GitHub Discussions.