mirror of
https://github.com/vitest-dev/vitest.git
synced 2025-12-08 18:26:03 +00:00
158 lines
5.8 KiB
Markdown
158 lines
5.8 KiB
Markdown
# Getting Started
|
|
|
|
<DevelopmentWarning/>
|
|
|
|
## 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](./why) section.
|
|
|
|
## Trying Vitest Online
|
|
|
|
You can try Vitest online on [StackBlitz](https://vitest.new). 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
|
|
|
|
```bash
|
|
// 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](https://vitejs.dev/config/#resolve-alias) and [plugins](https://vitejs.dev/guide/using-plugins.html) 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](https://www.typescriptlang.org/docs/handbook/triple-slash-directives.html#-reference-types-) at the top of your config file.
|
|
|
|
```ts
|
|
/// <reference types="vitest" />
|
|
import { defineConfig } from 'vite'
|
|
|
|
export default defineConfig({
|
|
test: {
|
|
// ...
|
|
},
|
|
})
|
|
```
|
|
|
|
See the list of config options in the [Config Reference](../config/)
|
|
|
|
## 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:
|
|
|
|
<!-- prettier-ignore -->
|
|
```json5
|
|
{
|
|
"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`](https://github.com/okonet/lint-staged) or with your CI setup.
|
|
|
|
```bash
|
|
vitest related /src/index.ts /src/hello-world.js
|
|
```
|
|
|
|
### Options
|
|
|
|
| Options | |
|
|
| ------------- | ------------- |
|
|
| `-v, --version` | Display version number |
|
|
| `-r, --root <path>` | Define the project root |
|
|
| `-c, --config <path>` | Path to config file |
|
|
| `-u, --update` | Update snapshots |
|
|
| `-w, --watch` | Watch mode |
|
|
| `-t, --testNamePattern <pattern>` | Run tests with names matching the pattern |
|
|
| `--ui` | Enable UI |
|
|
| `--open` | Open the UI automatically if enabled (default: true) |
|
|
| `--api [api]` | Serve API, available options: `--api.port <port>`, `--api.host [host]` and `--api.strictPort` |
|
|
| `--threads` | Enable Threads (default: true) |
|
|
| `--silent` | Silent 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 |
|
|
| `--coverage` | Use c8 for coverage |
|
|
| `--run` | Do not watch |
|
|
| `--global` | Inject APIs globally |
|
|
| `--dom` | Mock browser api with happy-dom |
|
|
| `--environment <env>` | Runner environment (default: node) |
|
|
| `--passWithNoTests` | Pass when no tests found |
|
|
| `--allowOnly` | Allow tests and suites that are marked as `only` (default: false in CI, true otherwise) |
|
|
| `-h, --help` | Display available CLI options |
|
|
|
|
## Examples
|
|
|
|
[@@include](../../../examples/README.md)
|
|
|
|
## Projects using Vitest
|
|
|
|
- [unocss](https://github.com/antfu/unocss)
|
|
- [unplugin-auto-import](https://github.com/antfu/unplugin-auto-import)
|
|
- [unplugin-vue-components](https://github.com/antfu/unplugin-vue-components)
|
|
- [vitesse](https://github.com/antfu/vitesse)
|
|
- [vitesse-lite](https://github.com/antfu/vitesse-lite)
|
|
- [fluent-vue](https://github.com/demivan/fluent-vue)
|
|
- [vueuse](https://github.com/vueuse/vueuse)
|
|
- [milkdown](https://github.com/Saul-Mirone/milkdown)
|
|
- [gridjs-svelte](https://github.com/iamyuu/gridjs-svelte)
|
|
- [spring-easing](https://github.com/okikio/spring-easing)
|
|
- [bytemd](https://github.com/bytedance/bytemd)
|
|
|
|
## 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](https://github.com/vitest-dev/vitest) to your local machine and then build and link it yourself ([pnpm](https://pnpm.io/) is required):
|
|
|
|
```bash
|
|
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](https://chat.vitest.dev) and [GitHub Discussions](https://github.com/vitest-dev/vitest/discussions).
|