SuperAPI AI 工具集

rstest-best-practices

测试与质量

查看项目

更新于 10-16 09:52

技能介绍

Rstest 最佳实践是一套在搭建、编写或审查 Rstest 项目时遵循的规则,来自 rstackjs/agent-skills。

用途:指导测试环境搭建、测试编写与配置审查,覆盖环境、Mock、快照、覆盖率及 CI 等环节。

主要能力与工作流:编辑前先检查现有包管理器、依赖策略、模块模式、构建配置、测试布局与框架约定。安装 @rstest/core,添加包内测试脚本,并创建扩展名与包模块模式匹配的配置文件。仅当复用构建配置能降低维护成本且兼容时才复用;适配器可选,不兼容或成本过高时改用独立 Rstest 配置,并显式复现所需的别名、插件、define、环境与 externals。有意配置测试发现、环境和 setup 文件;除非空测试集是预期且有文档说明的状态,否则不要启用 passWithNoTests。用 rstest list 验证测试发现,再运行聚焦测试、全量测试以及项目已有的构建或类型检查命令。

配置与环境:使用 @rstest/core 的 defineConfig 和与模块模式兼容的配置扩展名。优先显式从 @rstest/core 导入而非 globals: true。用 setupFiles 共享 matcher 与清理;仅在必要时使用 plugins、resolve 或 source。非标准布局时显式设置 include。服务端/SSR 测试用 node,模拟 DOM 用 happy-dom 或 jsdom,真实浏览器行为用 Browser Mode,并显式安装所选环境包。React/Vue 组件测试需注册对应构建插件、使用相应 Testing Library,并在 setup 文件中集中扩展 matcher 与清理。仅当环境或配置确实不同时才用多个测试项目,把 reporters、coverage、pool、isolation、bail 等全局选项保留在根级。

测试编写与 Mock:偏好验证单一公共行为的小测试;有意使用 .skip 或 .todo,绝不提交 .only。测试 API 与测试文件应与项目同一模块系统。优先用 await expect(promise).resolves… 与 .rejects… 替代可能漏掉断言的 try/catch。仅对小工具使用 includeSource,用 import.meta.rstest 保护测试,并在生产构建中设为 false。用 rs.fn() 处理函数、rs.spyOn() 处理方法、rs.mock() 工厂处理模块;Mock 外部边界而非被测对象。按需选择 clearMocks、resetMocks 或 restoreMocks。选择与模块系统匹配的模块 Mock API,在受测模块求值前注册提升/静态 Mock。模块 Mock 不一定把真实依赖移出 Rspack 构建图,必要时用别名或窄范围 externals。

快照与覆盖率:保持快照小且确定,短输出用内联快照,大结构化输出用文件快照,路径或不稳定数据用 serializer,每次更新都要审查。用 --coverage 或 coverage.enabled 启用覆盖率,选择已安装 Rstest 版本支持的 provider 并显式安装其包。先有意设置 coverage.include 再加阈值,分别为人和 CI 产物选择 reporter。

运行与 CI:单次运行用 rstest,rstest run 是可选显式等价写法;仅本地开发用 rstest --watch 或 rstest watch。用 rstest list 验证发现,用位置过滤或 -t 聚焦运行,-u 有意更新快照,-c 指定非默认配置。CI 中绝不使用 watch 模式,分发测试时用分片配合 blob 报告与 rstest merge-reports,需要机器可读结果时用 JUnit。日志嘈杂可考虑 silent: 'passed-only'。首行调试从聚焦复现和 --reporter=verbose 开始,用 --printConsoleTrace 处理嘈杂控制台输出,用 DEBUG=rstest 并检查 dist/.rstest-temp/.rsbuild/ 验证最终配置与生成产物,可用 Rstest VS Code 扩展或 JavaScript Debug Terminal 断点调试,用 rstest-debugging 做系统性诊断。最新文档见 https://rstest.rs/llms.txt。

限制:资料未提供具体收费、价格、支持平台或效果承诺。