SuperAPI AI 工具集

vitest-testing

测试与质量

查看项目

更新于 10-16 08:23

技能介绍

Vitest Testing 是一个用于 Nuxt 4 项目的 Vitest 单元测试技能,会在创建或修改 composables、组件、服务、工具函数或 Lambda 处理器时自动触发。

用途 该技能用于指导并规范 Nuxt 4 项目中的 Vitest 单元测试编写与运行,覆盖 composables、组件、服务、工具函数以及 Lambda 处理器等代码类型。

测试文件放置 技能规定了源文件与测试文件的对应关系:app/composables/<name>.ts 对应 tests/app/composables/<name>.test.ts;app/components/<Name>.vue 对应 app/components/tests/<Name>.test.ts(DOM 测试)或 tests/app/components/<Name>.test.ts(仅逻辑测试);app/utils/<name>.ts 对应 tests/app/utils/<name>.test.ts;services/<name>.ts 对应 tests/services/<name>.test.ts;utils/<name>.ts 对应 tests/utils/<name>.test.ts;terraform/lambda/src/<Name>/index.ts 对应 terraform/lambda/src/<Name>/tests/index.test.ts。仅组件 DOM 测试与 Lambda 处理器使用 tests/ 同目录方式,其余均放入顶层 tests/ 镜像目录。

环境选择 默认环境为 node,适用于 composables、服务、工具函数和 Lambda 处理器。仅 DOM 测试需要在测试文件首行添加 /** @vitest-environment happy-dom */。不得全局修改 vitest.config.ts 中的 environment。

测试编写规则 导入必须显式:import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'。对于使用 useRuntimeConfig、useState、computed、ref、watch、onMounted、onUnmounted、navigateTo 等 Nuxt 自动导入的代码,需在 beforeEach 中调用 tests/helpers 的 mockNuxtImports()。测试文件命名统一为 *.test.ts,不使用 *.spec.ts。异步或定时器测试在 beforeEach 中使用 vi.useFakeTimers(),在 afterEach 中使用 vi.useRealTimers()。通过 vi.spyOn(console, 'log').mockImplementation(() => {}) 在 beforeEach 中抑制控制台输出。优先测试抽取出的逻辑而非 DOM 渲染,测试行为而非模板。组件 DOM 测试使用 @vue/test-utils 的 mount(),并 stub Nuxt UI 组件。AWS 服务 mock 使用 mockSend + vi.mock('@aws-sdk/...') 模式,详见 references/testing-patterns.md。

各类代码的测试重点 Composables:返回值、状态变更、响应式更新、边界情况。组件:props、emits、插槽渲染、条件渲染(尽量通过逻辑抽取测试)。服务:成功路径、错误处理(自定义错误类)、边界情况(空输入、缺失字段)。工具函数:纯函数输入输出、边界条件。Lambda 处理器:每个 resolver action、有效与无效输入、DynamoDB mock 响应、错误路径。

运行测试 bun run test 单次运行;bun run test:watch 监听模式;bun run test:coverage 生成 v8 覆盖率报告。

覆盖率 覆盖率使用 @vitest/coverage-v8,配置位于 vitest.config.ts。阈值为:行 80%、函数 80%、分支 70%、语句 80%。

参考 详细 mock 模式、完整模板和真实代码库示例见 references/testing-patterns.md。