本文档介绍了Screenshot-to-Code项目所使用的测试基础架构和方法。它涵盖了前端和后端测试方法,重点介绍了如何运行现有测试和编写新测试。
Screenshot-to-Code采用多层测试方法来确保功能和可靠性
| 测试类型 | 目的 | 工具 | 位置 |
|---|---|---|---|
| 端到端测试 | 验证完整的应用程序工作流程 | Puppeteer | frontend/src/tests/qa.test.ts |
| 类型检查(前端) | 捕获类型错误 | TypeScript | 贯穿前端代码 |
| 类型检查(后端) | 捕获类型错误 | Pyright | 贯穿后端代码 |
| 单元测试(后端) | 测试单个组件 | pytest | 后端测试目录 |
来源: frontend/src/tests/qa.test.ts1-276 frontend/jest.config.js1-10 frontend/src/setupTests.ts1-4 backend/README.md1-8
该项目使用Puppeteer进行端到端测试,它自动化浏览器交互来验证完整的应用程序工作流程。
端到端测试在jest.config.js中配置,具有以下设置
ts-jest预设以支持TypeScriptnode.env.jest加载环境变量来源: frontend/jest.config.js1-10 frontend/src/setupTests.ts1-4
中的E2E测试qa.test.ts分为三个主要类别
每个测试都针对不同的AI模型(如GPT-4o、Claude)和技术栈(HTML+Tailwind、React等)组合进行运行。
来源: frontend/src/tests/qa.test.ts15-143
E2E 测试依赖一个名为App的辅助类,它抽象了常见的测试操作
主要方法包括
uploadImage():上传屏幕截图并等待代码生成generateFromUrl():输入URL并捕获结果页面edit():应用编辑指令以更新生成的代码clickVersion():在不同代码版本之间切换regenerate():触发代码重新生成_screenshot():在各个步骤进行屏幕截图(用于调试)来源: frontend/src/tests/qa.test.ts146-276
此图显示了典型测试执行期间的操作顺序
来源: frontend/src/tests/qa.test.ts202-259
E2E 测试使用了以下固定值
| 测试夹具 | 目的 | 应用场景 |
|---|---|---|
simple_button.png | 带按钮的简单UI | 更新和重新生成测试 |
simple_ui_with_image.png | 带有文本和图像的UI | 图像处理测试 |
测试结果(屏幕截图)保存在frontend/src/tests/results/目录中,该目录在.gitignore中被排除版本控制。
来源: frontend/src/tests/fixtures/simple_button.png frontend/src/tests/fixtures/simple_ui_with_image.png frontend/src/tests/qa.test.ts8-10 frontend/.gitignore28-30
后端使用Python的pytest框架进行测试。您可以通过以下方式运行测试:
后端类型检查使用Pyright进行。
中的pyrightconfig.json文件配置了要从类型检查中排除的文件
来源: backend/README.md1-8 backend/pyrightconfig.json1-4
运行E2E测试
npm run dev).env.jest文件,其中包含所需的环境变量(示例如下)npm test或npx jest qa.test.ts运行测试示例.env.jest文件
TEST_ROOT_PATH=src/tests
TEST_SCREENSHOTONE_API_KEY=your_api_key_here
使用以下命令运行后端测试:
使用以下命令运行类型检查:
来源: backend/README.md1-8 frontend/src/setupTests.ts1-4
添加新的E2E测试
qa.test.ts中,使用Puppeteer和App辅助类添加新的测试用例示例
添加新的测试固定值
frontend/src/tests/fixtures/qa.test.ts的顶部定义一个引用固定值的常量来源: frontend/src/tests/qa.test.ts15-143
通过遵循这些模式,您可以确保测试套件在应用程序发展过程中保持可维护性。