SuperAPI AI 工具集

integration-tests

测试与质量

查看项目

更新于 10-16 06:19

技能介绍

用途:为服务端 action、数据库操作和 API 路由编写集成测试,使用 Vitest 的 describe、expect、test,测试文件用 .spec.ts 扩展名,并与被测 action 或 model 放在一起。

主要能力与写法:每个测试回答五个问题——被测单元(放在具名 describe 块)、预期行为($given 与 $should 参数)、前置条件(数据库状态、已认证用户、表单数据)、预期结果(响应状态、数据库状态、重定向、toast)、如何定位 bug。测试必须使用“given: ..., should: ...”叙述格式。

约束:针对真实数据库测试,绝不 mock Prisma 或数据库调用;用 onTestFinished 在每测后清理创建的用户、组织及相关数据;用基础设施工厂(*-factories.server.ts)造数据并只覆盖测试需要的部分;用 createAuthenticatedRequest 构造带认证 cookie 的请求;用 createAuthTestContextProvider、createOrganizationMembershipTestContextProvider 等上下文提供者满足中间件要求;用 toFormData 把对象转为 FormData;用 setupMockServerLifecycle 配合 MSW 处理器 mock 外部服务(Stripe、Supabase、邮件);用 server.events.on("response:mocked", listener) 验证外部 API 调用,并在 onTestFinished 中清理监听器。

断言要点:用基础设施层的 model facade 函数在变更后验证数据库状态;重定向断言 expect(response.status).toEqual(302) 和 expect(response.headers.get("Location")).toEqual("/path");从 Set-Cookie 头提取并用 getToast 验证提示;检查 response.data.result.error.fieldErrors 验证校验错误;对多个输入产生相似错误响应时用 test.each 参数化;用响应助手 badRequest、forbidden、notFound、conflict 构造预期响应;同一路由多 intent 时可用 test.describe 分组,或封装 sendAuthenticatedRequest 减少样板;中间件测试中捕获抛出的 Response 对象做重定向断言;用 toEqual 断言前先把实际值与期望值存入变量。

适用与限制:仅适用于 .spec.ts 的服务端 action、数据库与 API 路由测试。纯函数测试(.test.ts)应改用 /unit-tests,React 组件渲染测试(.test.tsx)用 /happy-dom-tests,浏览器级用户流程测试(.e2e.ts)用 /e2e-tests。