SuperAPI AI 工具集

write-tests

测试与质量

查看项目

更新于 10-16 07:58

技能介绍

用途:在 Remix 仓库中编写、重构或审查测试,覆盖 .test.ts/.test.tsx 文件、包测试脚本、测试夹具与 mock 等场景。

主要能力与约定:

  • 先阅读最近的 package.json、tsconfig.json 和同级已有测试,再决定 runner 与夹具风格。
  • 判断包能否依赖 @remix-run/test,或它本身是 @remix-run/test 的依赖而需避免循环依赖。
  • 测试靠近行为归属方,优先本地 helper 与 Web/Node 原语,避免为造夹具导入更高层工作区包。
  • 仅测试用的工作区包放入 devDependencies 并使用 workspace:^,不加入运行时依赖。

Runner 选择:

  • 新写和改动的测试用 describe/it 风格;改动使用顶层 test() 的文件时,把受影响测试转为 describe/it,不动无关测试。
  • 默认用 @remix-run/test 与 @remix-run/assert。
  • 仅当被测包是 @remix-run/test 的依赖,或添加 Remix test/assert 会造成循环依赖时,才用 node:test 与 node:assert/strict。
  • node:test 包不要保留未经验证的 test:bun 脚本,Bun 测试运行器不会自动发现用 node:test 导入写的测试。

命令与导入: Node 测试脚本:"test": "node --disable-warning=ExperimentalWarning --test './src/**/*.test.ts'" Node 测试导入:import * as assert from 'node:assert/strict';import { describe, it } from 'node:test' Remix 测试脚本:"test": "remix test" Remix 测试导入:import * as assert from '@remix-run/assert';import { describe, it } from '@remix-run/test'

结构与断言:describe() 按公共 API 或行为归属命名,it() 按可观察行为命名;不要在 describe() 内用循环或条件生成测试;优先少量显式用例;异步测试全程 await;mock 少用且局部化,用 @remix-run/test 的上下文 mock,node 例外包才用 mock.method()/mock.fn()。夹具保持最小、就近,e2e 用最小应用或 handler,HMR 用真实文件变更、子进程、watcher 与浏览器断言,并在清理中关闭进程、资源服务器、watcher 与 HTTP 服务器。默认用 @remix-run/assert,断言公共行为与可观察副作用,错误测试断言消费者可依赖的形状/消息。

依赖与验证:运行时导入放 dependencies,测试文件、夹具与 runner 专用导入放 devDependencies,工作区依赖用 workspace:^。改依赖或脚本后运行 pnpm i --lockfile-only --ignore-scripts 再做冻结安装检查;改测试基础设施时用 pnpm i --frozen-lockfile --ignore-scripts 确认无循环工作区依赖警告。验证用最窄命令:pnpm --filter @remix-run/<package> run test、pnpm --filter @remix-run/<package> run typecheck、pnpm i --frozen-lockfile --ignore-scripts;跨包或共享测试基础设施改动可考虑 pnpm run test:changed、pnpm run typecheck:changed、pnpm run lint。

限制:资料未提供该技能的收费、平台支持范围或效果数据。