什么是Vitest?
Vitest 是由 Vite 驱动的测试框架。它的主要优势之一是它与 Vite 的统一配置。可以和Vite共用配置。如果存在vite.config.ts,vitest 将读取你的根目录 vite.config.ts 以匹配插件.如果创建 vitest.config.ts,那么它优先级将会最高。
主要功能:
支持对 Vue、React、Svelte、Lit等框架进行单元测试,组件测试。
开箱即用的 TypeScript / JSX 支持
安装
yarn add -D vitest || npm install -D vitest
//package.json
"scripts": {
    "test": "vitest", //监听模式
    //...
}
(可选)如果需要测试代码覆盖率 需要安装 @vitest/coverage-v8 或 @vitest/coverage-istanbul
yarn add @vitest/coverage-v8 -D || pnpm install @vitest/coverage-v8 -D
//package.json
"scripts": {
    "coverage": "vitest run --coverage", //覆盖率测试
}
(可选)如果需要直观的在页面上显示测试的相关内容,需要安装 @vitest/ui
yarn add -D @vitest/ui || pnpm install -D @vitest/ui
//package.json
"scripts": {
    "vitestui": "vitest --ui", //vitest Ui
}
(可选)如果需要测试浏览器环境下的表现,需要安装 jsdom
yarn add jsdom -D || pnpm install jsdom -D
//vite.config.js
export default defineConfig({
  //...
  test: {
    environment: 'jsdom' //默认是node环境
  }
})
(可选)如果需要对vue组件进行测试,需要安装@vue/test-utils
yarn add -D @vue/test-utils || pnpm install -D @vue/test-utils
//简单示例
import { mount } from '@vue/test-utils'
import TodoApp from './TodoApp.vue'
test('renders a todo', () => {
  const wrapper = mount(TodoApp) //包裹
  const todo = wrapper.get('[data-test="todo"]') //查找标签元素
  expect(todo.text()).toBe('Learn Vue.js 3') //断言文本
})
配置
如果你使用的是Vite构建的项目,那么直接在 vite.config.ts 配置最好,如果不是,则新建一个 vitest.config.ts 进行配置. 如果使用了Vite构建项目,但是又新建立了 vitest.config.ts 那Vite的配置会被覆盖。
IDE 集成: Vitest 提供了 Visual Studio Code 的官方扩展,以增强测试体验
- 非Vite构建项目
 
//vitest.config.ts
import { defineConfig } from 'vitest/config'
export default defineConfig{
    test:{
        coverage: { // v8 测试代码覆盖率
            reporter: ['text', 'json', 'html'],
        },
        // include: ['test/**/*.test.ts'], //匹配包含文件
        // exclude:[], //排除文件
    }
}
- Vite构建项目
 
需要在配置文件顶端,加入三斜杠指令
//vite.config.ts
/// <reference types="vitest" />
import { defineConfig } from 'vite'
export default defineConfig({
  test: {
    // ...
    include: ['test/**/*.test.ts'], //匹配包含文件
    // exclude:[], // 排除文件
    environment: 'jsdom', //浏览器环境
  },
})
打包的配置,在 vite 配置文件中加入以下代码,清除无用代码。
//vite.config.ts
  define: {
    'import.meta.vitest': 'undefined', 
  },
TypeScript 的支持,需要在 TypeScript 配置中进行配置
// tsconfig.json
{
  "compilerOptions": {
    "types": [
      "vitest/importMeta"
    ]
  }
}
简单示例
在根目录添加 __tests__ 文件夹,添加测试文件
__tests__/index.test.tsimport { expect, test } from 'vitest'
import { testName } from '../src/index'
test('vitest-test', () => {
    expect(testName('jack')).toBe('jack')
})
src/index.tsexport function testName (name) {
    return name
}
问题集合
执行vitestui 报错 Cannot read properties of undefined (reading ‘config’)
vitest 和 vitest/ui 的版本和 vite 不匹配
pnpm i vitest@latest @vitest/ui@latest -D