SuperAPI AI 工具集

vitest-unit-testing

测试与质量

查看项目

更新于 10-16 03:17

技能介绍

用途:为 TypeScript 工具函数、服务、store、转换与 API 客户端编写聚焦的 Vitest 5 单元测试,包括这些测试所用的 mock 和 fixture。

主要能力:先了解项目上下文,包括 Vitest 与 Node.js 版本、package scripts、测试根目录与配置文件、命名项目、测试环境(Node、jsdom 或 Browser Mode)、清理设置(clearMocks、mockReset、restoreMocks)以及本地命名、文件位置、fixture、helper 与断言风格。技能面向 Vitest 5,项目使用旧版本时需调整 API 与默认值;修改测试的请求本身不构成升级依赖的授权。

用法:无更强约定时,测试放在相邻的 tests/ 目录,文件与源文件同名加 .test.ts,如 config.ts 对应 tests/config.test.ts,用 describe 分组并在测试名写明具体结果。每个测试按 Arrange、Act、Assert 结构编写;同一契约适用多组输入时使用 test.each。通过公共契约测试行为,在隔离有帮助时 mock 外部协作者,被测代码正常执行,保持测试独立且确定性,并为每个测试提供至少一个结果断言,优先使用 toBe、toStrictEqual、toHaveLength、toHaveBeenCalledWith、toHaveBeenCalledTimes 等精确断言。

Vitest 5 中 clearMocks 默认为 true,调用历史在每测试前清空而实现保留;mockReset 和 restoreMocks 默认 false,只添加测试所改变状态所需的清理,如测试改变实现后重置 mock、restoreMocks 关闭时恢复 vi.spyOn、假定时器后恢复真实定时器。提升的 vi.mock、vi.unmock、vi.hoisted 调用必须放在模块级别,Vitest 5 拒绝在函数、块、钩子及测试或套件回调内使用;仅在需要为后续动态导入使用非提升行为时使用 vi.doMock 或 vi.doUnmock。异步断言必须 await,包括 resolves、rejects、expect.poll 与异步快照匹配器,Vitest 5 会使未 await 的异步断言失败;定时器回调调度 promise 时使用异步定时器控制,如 await vi.advanceTimersByTimeAsync(1_000)。类型检查方面可用 vi.mocked()、satisfies、@ts-expect-error 以及 vi.mock(import(...))。

运行:优先使用项目 package script,在拥有配置的项目根目录以非交互方式运行;没有合适脚本时使用 vpx vitest run,可指定文件、目录或命名项目,Vitest 5 不向父目录搜索配置,需在正确根目录运行或显式传入 --config。覆盖改用 coverage,疑似不稳定用 --repeats,vpx vitest doctor 仅用于测试性能调查。

限制:资料未提供具体价格、平台支持范围与效果数据;参考资料仅列出 references/mocking.md,涉及模块 mock、spy、返回行为、定时器、清理、断言与常见依赖模式。