ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

TANCN测试实践:Vitest如何保证代码生成器100%可靠

TANCN测试实践:Vitest如何保证代码生成器100%可靠 TANCN测试实践Vitest如何保证代码生成器100%可靠【免费下载链接】tancnTanstack Builder for Form and Table项目地址: https://gitcode.com/gh_mirrors/ta/tancnTANCN 是一个基于 TanStack 生态的可视化构建器能帮你拖拽搭建表单Form和表格Table并一键生成可直接粘贴到项目的 React 代码、Zod / Valibot / ArkType Schema 以及安装命令。但生成代码意味着只要生成器里一个字符串写错用户的项目就可能编译失败。这篇文章用大白话讲清楚TANCN 是如何用 Vitest 搭建起一套测试体系让每一个代码生成器都变得可靠的。代码生成器在做什么为什么它需要被重点保护当你在编辑器里拖入 Input、Checkbox、Select 等字段后TANCN 背后有三组生成器在工作表单代码生成器把字段配置变成完整的 React 组件代码src/lib/form-code-generators/react/Schema 生成器根据字段类型和必填项生成 Zod、Valibot、ArkType 三种校验 Schemasrc/lib/schema-generators/表格代码生成器根据列配置生成 DataGrid 组件、数据文件和导入语句src/lib/table-code-generators/react/这些代码会原封不动地进入用户的项目所以任何一个字段名拼错、任何一段多余的 import都是真实事故。生成器逻辑复杂、输出又是纯文本只有自动化测试才能做到每次修改后立即验证。测试配置不到 10 行的关键设置打开 vitest.config.ts整个测试环境的核心只有几行test: { globals: true, environment: jsdom, setupFiles: [./tests/setup.ts], },三个配置各管一件事配置作用globals: true全局注入describe/it/expect测试文件更干净environment: jsdom提供浏览器模拟环境React 相关代码可以正常跑setupFiles统一的 tests/setup.ts 全局初始化另外resolve.alias把映射到src所以测试里可以放心地import ... from /lib/...与源码路径完全一致。运行方式也很简单在 package.json 中pnpm test即执行vitest run一次性跑完所有用例。测试全景11 个测试文件约 1800 行所有测试集中在 tests/ 目录按被测模块分目录组织与源码结构一一对应目录测试对象文件tests/schema-generators/三种 Schema 生成器 默认值生成器zod.test.ts、valibot.test.ts、arktype.test.ts、generate-default-value.test.tstests/table-code-generators/表格代码、数据、导入、过滤、总入口5 个测试文件tests/react/表单 import 语句生成generate-imports.test.tstests/header-rate-limiter.test.ts请求限流器单文件可以看到一个清晰的策略每个生成器函数都有对应的测试新增字段类型比如 FormArray 字段数组时三个 Schema 测试文件会同时新增用例防止Zod 通过了、Valibot 挂了这种偏科问题。值得新手借鉴的 4 个测试技巧1️⃣ 用 toContain 断言关键片段生成器输出的是整段代码文本逐字比对太脆弱。TANCN 的通行做法是断言关键片段必须存在。以 zod.test.ts 为例构造一个含两个 Input 字段的 FormArray 后expect(schemaString).toContain(z.array); expect(schemaString).toContain(z.object); expect(schemaString).toContain(z.string());不关心缩进和顺序只关心该出现的东西出现了——这正是对生成代码最核心的验证。2️⃣ 用 not.toContain 反向断言别多出东西只验证该有的还不够还得验证不该有的没有。在 index.test.ts 中当过滤、分页全部关闭时expect(result.files[0].code).not.toContain(Filters); expect(result.files[0].code).not.toContain(DataGridPagination);这一条保证了用户关闭的功能不会偷偷残留在生成代码里避免用户项目白白引入多余依赖。3️⃣ 用 vi.mock 隔离 React Hook测试 generate-default-value.ts 时源码依赖了构建器状态 Hook。测试通过 generate-default-value.test.ts 中的vi.mock把 Hook 换成假实现让被测函数纯函数化既快又稳。4️⃣ 用 vi.useFakeTimers 冻结时间限流器 header-rate-limiter.ts 的判定完全依赖时间。测试里 header-rate-limiter.test.ts 使用假定时器把系统时间钉死然后构造21 分钟前10 分钟前的请求精确验证放行、拒绝和retryAfter秒数——时间被冻结后测试结果 100% 可复现。自己动手三步跑起这套测试克隆仓库如需克隆仓库地址为 https://gitcode.com/gh_mirrors/ta/tancn 执行pnpm install安装依赖项目使用 pnpm 管理执行pnpm test几秒内即可看到全部测试结果小结测试不是负担而是代码生成器的产品力TANCN 的测试实践给所有做代码生成类工具的项目提了 3 个参考按被测模块组织测试目录与源码结构镜像新人一眼能找到该改哪里正向 反向双重断言既验证关键片段存在也验证多余内容缺席用假数据、假时间、假依赖让生成器测试不依赖浏览器和网络跑得又快又稳对代码生成工具来说用户看不到测试代码但能感受到生成的代码拿来就能用——这正是那 11 个测试文件每天在悄悄兑现的承诺。【免费下载链接】tancnTanstack Builder for Form and Table项目地址: https://gitcode.com/gh_mirrors/ta/tancn创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表