SuperAPI AI 工具集

frontend-unit-testing

测试与质量

查看项目

更新于 10-15 21:55

技能介绍

用途:指导为 Gradio 前端 Svelte 组件编写全面的行为驱动单元测试,强调测试可观察行为而非实现细节。

主要能力与原则:测试一切可测内容,多写测试无妨;只断言行为,不断言 CSS 类名、内部状态或 DOM 结构本身。每个组件必须测试 Gradio 专有功能:get_data、set_data 与事件派发,包括 set_data 后 DOM 反映变更、get_data 返回当前状态、两者往返一致、用户交互后 get_data 反映变化,以及 change、input、submit、blur、focus、clear、upload、select、custom_button_click 等事件。测试在真实浏览器中运行(Vitest 浏览器模式 + Playwright),非 jsdom,除非不可避免(如 navigator.clipboard、MediaStream)否则不要 mock,必须 mock 时需注释说明原因。纯视觉 prop 不得静默跳过,应加 test.todo 占位并说明需要视觉回归测试。不要为可测试性重构生产代码,除非用户明确批准。

使用方式:所有测试工具从 @self/tootils/render 导入,不要直接从 @testing-library/svelte 导入。render() 挂载带完整共享 prop 基础设施的组件,返回 container、listen、set_data、get_data 及全部 DOM 查询函数;监听挂载时事件需传 { retrospective: true }。fireEvent 已包装,每次事件后等待两次 tick,需 await。afterEach 调用 cleanup()。每个测试文件必须调用 run_shared_prop_tests(config) 运行 elem_id、elem_classes、visible、label、show_label、validation_error 等共享测试,不适用时用 has_label: false、has_validation_error: false 关闭对应项,不得手写替代。查询优先级为语义角色、标签与文本、testid;禁止 container.querySelector,缺 testid 时应向组件源码添加。禁止使用 toBeTruthy()/toBeFalsy()、快照测试和人工 setTimeout。

运行命令:始终使用 CI=1 pnpm test:run(pnpm test 会进入 watch 模式),在仓库根目录执行。示例:CI=1 pnpm test:run Textbox.test.ts;CI=1 pnpm test:run -t elem_id;CI=1 npx vitest run --config .config/vitest.config.ts js/<pkg>/<Test>.test.ts。若缺少 chrome-headless-shell,执行 pnpm exec playwright install chromium --only-shell。写完或修改测试后需运行验证。

适用场景:针对特定功能或回归的定向测试,以及整组件的完整测试套件(后者需先调研源码与 Python 组件定义、分析可测面、给出计划并等待批准)。

限制:本资料仅针对 Gradio 前端 Svelte 组件的单元测试流程,未提供其他测试框架、覆盖率要求或定价信息。