质量保障:Convex + Better Auth 单元测试与 E2E 测试工程化实践
【免费下载链接】better-authConvex + Better Auth 🔥项目地址: https://gitcode.com/gh_mirrors/con/better-auth
认证是任何应用中最不能出错的部分——注册、登录、会话失效,任何一环的疏漏都可能直接演变为安全事故。这正是Convex + Better Auth项目把测试工程化做到极致的原因:它同时构建了单元测试与E2E 测试两道防线,用低成本、高覆盖的自动化手段为认证系统兜底。本文将拆解这套测试体系的设计思路,带你看看一个开源认证组件如何用 Vitest、convex-test 与 Playwright 织出一张可靠的安全网。
为什么认证系统更需要测试工程化?
认证链路涉及数据库、会话令牌、Cookie、跨域跳转等多个环节,Bug 往往藏在边界条件里:会话过期后该返回什么?JWT 刷新在哪个接口生效?这类问题靠人工点几遍页面根本测不干净。测试工程化的意义在于把"正确"变成可重复验证的结论——改动一行代码,立刻知道有没有破坏登录流程,而不是等用户来报障。
单元测试:用 Vitest 守护核心逻辑
单元测试是整个测试金字塔的底座,它追求"快"与"准"。项目使用 vitest.config.ts 配置测试环境为edge-runtime,与认证代码实际运行的边缘运行时保持一致,让测试结果更贴近生产行为。
单测覆盖范围:从插件钩子到客户端适配器
项目把单测分散在源码旁,随模块一起演进,例如:
- src/plugins/convex/index.test.ts 验证 Convex 插件的 JWT Cookie 刷新钩子,精确断言哪些路径(如
/update-session)该触发、哪些(如无会话的/get-session)不该触发; - src/client/adapter.test.ts、src/client/create-client.test.ts 覆盖客户端适配器与 API 创建逻辑;
- src/nextjs/index.test.ts 与 src/plugins/cross-domain/index.test.ts 守护框架集成和跨域安全。
一键运行:npm test 搭配类型检查
测试脚本非常直观(见 package.json):npm test执行vitest run --typecheck,在跑单测的同时完成 TypeScript 类型校验,一次命令拿到双重保障。调试阶段可用npm run test:watch开启监听,写覆盖率报告则用npm run test:coverage。
集成测试:convex-test 让组件真实跑起来
纯单测无法覆盖"组件与 Convex 数据库交互"的场景,于是项目引入convex-test做集成测试。src/test.ts 导出一个register函数,可以把 better-auth 组件注册到内存中的测试 Convex 实例上:
register(t, "betterAuth");配合 src/test/adapter-factory/ 下的多种测试场景(基础认证流、字段重命名、插件表、额外字段等),集成测试在无外部依赖的前提下模拟出真实的认证读写路径,既快又稳。
E2E 测试:Playwright 模拟真实用户操作
单元测试和集成测试解决"逻辑对不对",E2E 测试解决"体验通不通"。E2E 环节基于 Playwright,测试用例放在 e2e/tests/ 目录,覆盖三个核心场景:
- sign-up.spec.ts:注册
- sign-in.spec.ts:注册 → 登出 → 重新登录
- session-persistence.spec.ts:会话持久化
注册 → 登出 → 登录:一条完整的用户旅程
以 sign-in.spec.ts 为例,它模拟了一个完整的用户旅程:先注册一个带时间戳的唯一邮箱,登出后再用同一凭证登录,最后断言页面出现"已认证"状态。这类用例把前端表单、后端 API、会话 Cookie 整条链路串起来,任何一环断开都会立刻暴露。页面操作细节封装在 e2e/helpers/auth.ts 中,用例本身保持简洁。
后端预置与数据隔离
E2E 测试最怕"环境不稳定"。项目用 e2e/backendHarness.js 自动下载并拉起一个全新的本地 Convex 后端,e2e/run-e2e-tests.sh 负责注入测试专用的环境变量(如隔离的BETTER_AUTH_SECRET)并部署函数,e2e/playwright.config.ts 则在测试前启动示例前端。整条流水线互不干扰,跑完即销毁,绝不影响开发环境数据。
测试工程化的三个可复用经验
- 按层级分工:逻辑细节交给单测,交互链路交给 E2E,避免用昂贵的浏览器测试去验证廉价的分支逻辑;
- 环境即代码:测试后端、密钥、环境变量全部脚本化,任何人 clone 后跑
npm run test:e2e都能复现同样结果; - 唯一数据源:每次 E2E 用
Date.now()生成唯一邮箱,从根上杜绝测试数据串扰。
总结
从 Vitest 的毫秒级单测,到 convex-test 的内存集成测试,再到 Playwright 的完整用户旅程,Convex + Better Auth用一套清晰的分层测试策略,把认证系统的质量防线建在了每个提交之前。如果你也在构建自己的认证服务,不妨照这个思路搭建测试工程化体系——毕竟,认证系统的可靠性,永远值得用自动化去守护。😉
【免费下载链接】better-authConvex + Better Auth 🔥项目地址: https://gitcode.com/gh_mirrors/con/better-auth
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考