103个单元测试加26个端到端测试,一个表单渲染引擎把自己逼到了什么程度?
Schepta团队给出的答案是:React、Vue、Vanilla三种框架全跑通,react-hook-form和Formik集成一个不落下。这套测试密度不是为了炫技,是为了让用的人敢把业务逻辑全押在「schema驱动」这四个字上。
从表单工厂到任意工厂:架构预留的野心
Schepta的核心——编排器(orchestrator)、注册表(registry)、中间件(middleware)、流水线(pipeline)——完全不看UI类型脸色。今天喂给FormFactory(表单工厂)的同一套机制,明天可以喂给MenuFactory(菜单工厂)、仪表盘、向导流程。
文档里已经埋了伏笔:menu-item、menu-container这些组件类型躺在概念设计里,等优先级到位就能激活。
但团队选择先死磕表单。理由很现实:多租户场景里最疼的就是表单。不同租户要不同字段、不同校验规则、不同流程分支,把「schema转表单」这个硬骨头啃下来,最痛的场景就解了。其他工厂可以排队。
架构上没有任何东西阻止你造新工厂,先打表单是产品决策,不是技术天花板。
多租户:一个租户一份schema,UI不乱
Schepta把多租户做成了原生能力。每个租户拿自己的schema,渲染出来的界面保持统一设计系统。不是硬编码分支判断,是数据驱动——schema长什么样,界面就长什么样。
这对SaaS产品是刚需。客户A要20个字段,客户B只要其中8个还换个顺序,传统做法是if-else地狱或者维护多套代码。Schepta的思路是:后端根据租户ID吐对应schema,前端引擎只管渲染。
A/B测试同理。同一套界面,schema A给3个字段,schema B给5个或调个顺序。Feature flag层决定发哪个schema,应用代码零改动,只换JSON。
向导流程:下一步去哪,schema说了算
动态向导是Schepta的下一个自然延伸。用户填完第一步,答案决定第二步的schema长什么样——字段、选项、甚至界面类型都可能变。权限、角色、历史行为都能成为schema的输入变量。
每一步都是独立的schema,Schepta负责渲染当前这一步。状态管理交给外部,渲染层保持纯粹。
White-label场景更极端:每个客户完全自定义表单定义,从CRM配置或独立API拉schema,Schepta保证渲染一致性。这对内部工具平台、可配置SaaS是核心卖点。
低代码与AI:schema成了通用语言
当人类或AI能生成schema,Schepta就变成了runtime。可视化搭建工具拖拖拽拽出schema,Schepta实时预览;AI对话产品里,大模型直接输出schema,Schepta渲染成交互界面。
MCP(Model Context Protocol,模型上下文协议)场景尤其有意思。产品在聊天窗口内运行,用户自建MCP server,在tools里暴露「根据当前对话上下文获取schema」的能力。Claude这类助手调用tool拿到schema,Schepta在聊天界面里渲染出表单或操作面板。
同一个引擎,聊天内外体验一致,且可测试、可预测。
测试即承诺:103+26的底气从哪来
Schepta的测试策略分两层。单元测试103个,锁死schema解析、中间件执行、组件注册这些核心逻辑。端到端测试26个,Playwright驱动,走完「schema输入→引擎解析→React/Vue/Vanilla渲染→用户交互→表单提交」全链路。
覆盖三种框架不是面子工程。多租户产品往往技术债缠身,前端框架混用、迁移成本高。Schepta用测试保证:无论你 legacy 代码是React还是Vue,新功能都能接进来,渲染结果可预期。
react-hook-form和Formik的集成测试也在套件里。表单状态管理是雷区,Schepta选择把两个主流库都验一遍,而不是假设「API设计合理就应该都能跑」。
测试密度直接对应业务信心:你可以专注写schema和业务规则,渲染层不会半夜炸锅。
项目代码在GitHub开源,文档覆盖架构概念、API参考、扩展指南。扩展性设计体现在中间件机制——自定义校验、数据转换、副作用注入都能插进去,不碰核心渲染逻辑。
一个用户在讨论区问:如果明年要支持Svelte,成本有多高?维护者回复:加一套渲染适配器,测试套件里补对应用例,核心零改动。这大概就是「架构预留」四个字最实在的注脚。
当你的多租户客户第17次提出「这个字段我们要藏掉,那个校验规则要改」时,你会希望手里握的是一套测试完备的schema引擎,还是另一张技术债欠条?
热门跟贴