关于 node-testing
为 Node.js 项目构建可靠测试基础设施的技能,适合需要明确运行器配置和覆盖率门槛的开发者。内容涵盖运行器选择、模拟策略、React 测试与验证流程。
主要功能
- 01Vitest 与 node:test 选择指南
- 02明确配置测试运行器
- 03设置失败即阻断的覆盖率门槛
- 04React Testing Library 测试模式
- 05聚焦边界的模拟策略
适用场景
- 01为 Node.js 项目选择运行器
- 02将 Jest 测试套件迁移到 Vitest
- 03让覆盖率门槛实际生效
- 04验证 React 组件行为
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ paldom/ node-skills --skill node-testing安装后在 Claude Code 中输入/node-testing确认已加载。
附带文件evals/evals.jsonreferences/testing-playbook.md
详细介绍
node-testing
构建有意义的测试基础设施:明确配置测试运行器,让覆盖率阻止构建,而不是只做装饰,并使用诚实可靠的模拟。此技能要解决的问题:模型默认采用过时的 Jest 配置,生成无人设门槛的覆盖率报告,还把组件测试扩展成不稳定的伪 E2E 测试。
不适用场景
- E2E / 真实浏览器流程 → 不属于本仓库的范围;请转用 Playwright 及其文档(明确列为非目标)。
- Lint →
node-lint;tsconfig →node-typescript。 - 在 GitHub Actions 中配置任务 / 矩阵 →
node-ci(此技能定义运行什么;那个技能定义在哪里运行)。
工作流
- 根据决策表选择测试运行器,见
references/testing-playbook.md:- Vitest 适用于任何非平凡场景:原生支持 TS/JSX、提供良好的监视模式体验、快照和模拟功能,并适用于 React 工作。
- node:test 适用于不依赖依赖项的纯 Node.js 库,零依赖本身就是其特性;同时应说明其权衡(TS 需要 loader,监视和快照体验较弱)。
- 从 Jest 现代化迁移到 Vitest 是默认路径(对大多数测试套件而言 API 兼容);操作手册包含迁移步骤。
- 编写明确配置(不依赖版本默认值):环境(
node/jsdom/ 浏览器模式,并说明权衡)、全局变量策略、设置文件。 - 将覆盖率作为门槛:使用 v8 提供程序,并明确设置会导致运行失败的
thresholds。原则:覆盖率用于发现缺口,不能证明质量——与其追逐虚荣的全局数字,不如严格把控 PR 增量;绝不要为了提高浅层测试的数量而上调门槛。 - React:在 Vitest 中使用 React Testing Library + user-event;通过角色 / 文本测试行为,而非实现细节;示例中使用仓库里的真实组件,绝不用玩具示例。
- 模拟规范:在边界处模拟(网络、时钟、fs),不要模拟内部模块;使用假计时器时,须参考操作手册中的陷阱清单。
- 验证:本地完整测试套件通过;明确证明未达到门槛时覆盖率检查会失败(验证一次即可);配置好脚本(
test、test:coverage)。
输出规范
选择测试运行器并写明理由;提交明确配置;设置会使 CI 失败的覆盖率门槛;至少提供一个展示配置效果的真实测试(渲染真实组件 / 测试真实模块);配置好脚本;若问题与测试不稳定有关,则应用不稳定测试排查清单。
注意事项
- 在现代 Vitest 中,使用 AST 映射的 v8 覆盖率精度可媲美 istanbul 级别——须检查版本要求,并在主要版本升级时重新验证。
- jsdom 并非浏览器:依赖真实布局、导航或 workers 的测试应放在 Playwright 中,而不是通过更重的单元测试模拟来处理。
vi.mock会提升执行位置——引用外部变量的工厂函数可能悄无声息地出错;操作手册展示了安全模式。- 通过
--changed过滤器的测试套件不代表测试套件全部通过——合并前须运行完整测试(参见:node-ci)。
文件
references/testing-playbook.md— 测试运行器决策表、明确配置、覆盖率门槛、RTL 模式、模拟陷阱、不稳定测试排查。
评论
支持 Markdown