- 前端
- 开发工具
【免费下载链接】dillinger
The last Markdown editor, ever.
本文以仓库内 .agent/skills/webapp-testing/SKILL.md 为骨架,结合 Dillinger(Next.js 14 在线 Markdown 编辑器)仓库中的真实 E2E 测试、Playwright 配置与 API 路由测试展开。读完本文,你将掌握一套可落地的 Web 应用测试方法论:从深度审计清单、E2E 优先级排序、Playwright 配置调优,到 API 边界测试、测试组织与 CI 集成,并能在 Dillinger 仓库中找到每一处对应的实现证据直接对照。
1. 测试工具箱:运行时脚本与依赖准备
SKILL 文档为自动化浏览器测试提供了一组开箱即用的运行时脚本,核心入口是scripts/playwright_runner.py:
| 脚本 | 用途 | 用法 |
|---|---|---|
scripts/playwright_runner.py | 基础浏览器测试 | python scripts/playwright_runner.py https://example.com |
| (同上,带截图) | 截图辅助 | python scripts/playwright_runner.py <url> --screenshot |
| (同上,无障碍检查) | 可访问性审计 | python scripts/playwright_runner.py <url> --a11y |
脚本依赖 Python 侧安装 Playwright 及 Chromium:
pip install playwright && playwright install chromium需要说明的是,这一通用脚本属于技能文档中的通用运行器方案;Dillinger 仓库实际的 E2E 运行体系是@playwright/test驱动。在 package.json 中可以找到完整命令链:
"test": "npm run test:unit && npm run test:e2e", "test:unit": "vitest run", "test:e2e": "npm run build && playwright test", "test:e2e:headed": "npm run build && playwright test --headed", "verify": "npm run lint && npm run typecheck && npm run test:unit && npm run test:e2e"其中test:e2e先执行npm run build再跑 Playwright,verify则把 lint、类型检查、单元测试与 E2E 全链路串起来,与 SKILL 文档中"CI 流水线先装依赖、再装浏览器、再跑测试"的思想一致。开发依赖中的@playwright/test(^1.58.2)即仓库 E2E 的实际载体。
2. 深度审计方法:先发现,后系统化测试
SKILL 文档强调 Web 应用测试的第一原则是"发现并测试一切,不留任何未测试路由"。审计的第一步是发现(Discovery):
| 目标 | 如何发现 |
|---|---|
| 路由(Routes) | 扫描app/、pages/、router 文件 |
| API 端点 | Grep 搜索 HTTP 方法(GET/POST/PUT/DELETE) |
| 组件(Components) | 定位组件目录 |
| 功能(Features) | 阅读文档 |
在 Dillinger 仓库中,这套发现路径可以精确落地:
- 路由:Next.js App Router 结构集中在 app 目录,包括编辑器主页 app/page.tsx、导出、导入、OAuth 回调等 API 路由(如 app/api/export/html/route.ts);
- 组件:位于 components 下的
editor/、preview/、sidebar/、modals/、navbar/等目录; - API 端点:
app/api/下按github/、dropbox/、google-drive/、onedrive/、bitbucket/等云服务组织的 route.ts 文件,对应各云存储集成; - 功能:docs 目录下的设计文档与迁移计划。
发现之后进入系统化测试三步法:
- Map(映射)——列出所有路由与 API;
- Scan(扫描)——验证它们都能正常响应;
- Test(测试)——覆盖关键路径。
Dillinger 仓库的测试布局正是这三步的产物:tests/routes/覆盖 API 路由,tests/e2e/覆盖关键用户路径,tests/components/、tests/hooks/、tests/lib/、tests/store/覆盖单元层面。
3. Web 测试金字塔
SKILL 文档用金字塔模型说明 Web 应用的测试投入比例:
/\ E2E (少量) / \ 关键用户流程 /----\ / \ Integration (适量) /--------\ API、数据流 / \ /------------\ Component (大量) 单个 UI 部件要点:E2E 测试昂贵,只应用于关键路径;大量测试应落在金字塔底部的组件与单元层。Dillinger 仓库的 tests 目录正是这一模型的实证:e2e/仅 5 个 spec 文件(smoke、editor、import-export、logobar、settings-sidebar),而组件、hooks、lib、store 的单元测试文件更多更细,金字塔底部明显更厚。
4. E2E 测试原则
4.1 测什么:按优先级排序
| 优先级 | 测试内容 |
|---|---|
| 1 | 快乐路径(Happy path)用户流程 |
| 2 | 认证流程(Authentication flows) |
| 3 | 关键业务操作(Critical business actions) |
| 4 | 错误处理(Error handling) |
在 Dillinger 的 tests/e2e/smoke.spec.ts 中可以看到典型的快乐路径覆盖:加载编辑器外壳 → 断言标题、侧边栏切换按钮、#preview预览区、字数与字符数统计 → 隐藏/显示预览 → 打开设置弹窗 → 验证 Night Mode 开关可见。这正是"先测外壳稳定,再深入细节"的冒烟策略。
4.2 E2E 最佳实践
| 实践 | 原因 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 使用>// 摘自 tests/e2e/settings-sidebar.spec.ts:确定性状态种子注入 function seedLocalStorage( documents = seededDocuments, current = seededDocuments[0], profile = defaultProfile ) { return (args) => { if (window.localStorage.getItem("files")) return; window.localStorage.setItem("files", JSON.stringify(args.documents)); window.localStorage.setItem("currentDocument", JSON.stringify(args.current)); window.localStorage.setItem("profileV3", JSON.stringify(args.profile)); }; } 这一模式是"清理状态、测试独立"的实战范本:不依赖外部数据库或网络,用种子数据把每个用例固定在同一初始状态,从根上消除顺序依赖导致的 flaky。 5. Playwright 原理与配置实践5.1 核心概念
5.2 配置推荐
Dillinger 仓库的 playwright.config.ts 与推荐值几乎逐条对应,可作标准配置模板: 要点解读:
6. 视觉测试6.1 何时使用
6.2 策略
7. API 测试原则7.1 覆盖维度
7.2 Dillinger 中的 API 测试实证仓库在 tests/routes 下用 Vitest( 该测试完整覆盖了状态码(缺参返回 400)、响应结构(HTML 是否含 8. 测试组织结构与命名约定8.1 文件结构SKILL 文档推荐的标准结构: Dillinger 仓库的 tests 目录与之同构(integration 层以 这种"E2E 只测关键路径、API 与单元测试铺底"的布局,正是金字塔模型的落地形态。 8.2 命名约定
Dillinger 的 E2E 文件命名两者兼取: 9. CI 集成9.1 流水线步骤
9.2 并行化策略
Dillinger 的 playwright.config.ts 通过 10. 反模式清单
在 Dillinger 仓库中可以找到每条反模式的正面对照:
结语
Dillinger 仓库把 SKILL 文档中的每一条原则都落成了可运行、可复现的代码: 赞
【免费下载链接】dillingerThe last Markdown editor, ever. 项目地址:https://gitcode.com/gh_mirrors/di/dillinger 相关推荐
上一篇:告别投稿焦虑!Elsevier投稿追踪工具让你实时掌握审稿进度 下一篇:终极Godot资源解包指南:3分钟掌握.pck文件提取技巧 创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考 |