SuperAPI AI 工具集

testing

测试与质量

查看项目

更新于 10-15 21:41

技能介绍

用途:为 AdonisJS 应用提供 Japa 测试规范,分 unit 与 functional 两套。unit 测 action/service 内部逻辑并打桩依赖;functional 通过 client 打 HTTP 端点,连真实 Postgres,并用每测试事务包裹。

主要能力与规则:测试文件放在 app/<mod>/tests/{unit,functional}/*.spec.ts,写法与最近的既有 spec 保持一致。涉及数据库的 group 需用 group.each.setup(() => testUtils.db().wrapInGlobalTransaction())。副作用依赖必须显式 fake:Mail 用 mail.fake()(tests/bootstrap.ts 有全局兜底),Drive 用 drive.fake(env.get('DRIVE_DISK') ?? 'fs') 并在 teardown 恢复,Emitter 用 emitter.fake(['event:name'])(必须传数组),Transmit/SSE 在 config/transmit.ts 设 transport: null。单元测试用 sinon.stub 打桩服务、驱动和单个函数,并在 teardown 调 sinon.restore()。数据用工厂而非手写 fixture,如 UserFactory.create()。POST/PUT/DELETE 必须加 .withCsrfToken();认证用 .loginAs(user);断言 JSON 加 .accept('json'),Inertia 流程加 .withInertia()。数据库断言用 db.assertHas / db.assertMissing。RBAC 场景用 ensureBaseRoles() 与 withRole / withPermissions。

限制与反模式:不要跳过事务包裹,否则数据泄漏、测试顺序敏感;不要手写 fixture;不要在测试中真实发邮件、访问网络或 Drive;不要直接实例化 controller 调用 handler,应走 client 以触发中间件、校验器和策略;不要 fake emitter 后又期望监听器执行;不要用模块级变量在测试间共享状态。授权失败在 Inertia 下返回 302,应断言资源状态而非重定向。

参考:Japa 文档 https://japa.dev/docs,AdonisJS 测试指南 https://docs.adonisjs.com/guides/testing/introduction,Mail/Drive fakes 见 https://docs.adonisjs.com/guides/digging-deeper/mail#fakes。