Pascal Editor测试指南:Bun test与Turbo测试任务组织全解
【免费下载链接】editorOpen-source 3D architectural editor with a local CLI, MCP tools, and practical workflows for humans and AI agents.项目地址: https://gitcode.com/GitHub_Trending/editor93/editor
Pascal Editor 是一款开源 3D 建筑编辑器,本项目采用Bun test + Turborepo(Turbo)测试任务来组织整个 Monorepo 的测试。这篇 Pascal Editor 测试指南会用最短的篇幅讲清楚:600 多个测试文件如何分布、bun run test一条命令背后的执行链路,以及新手最容易踩的“裸bun test”陷阱。
一句话认识测试架构
Pascal Editor 是一个 Bun Workspaces + Turborepo 的 Monorepo,工作区包括 apps/、packages/、tooling/ 三大块,配置见根目录 package.json:
| 工作区 | 职责 | 测试脚本 |
|---|---|---|
| packages/core | 场景 Schema、状态管理(无 UI) | bun test src |
| packages/viewer | React Three Fiber 3D 渲染 | bun test src |
| packages/nodes | 墙、门、窗等建筑节点定义 | bun test |
| packages/editor | 编辑器组件与业务逻辑 | bun test src |
| packages/cli | 本地 CLI(给人类和 AI Agent 用) | bun test src |
| packages/mcp | MCP 工具层 | bun test |
| apps/editor | Next.js 主应用 | bun test lib |
全仓库共有616 个测试文件(*.test.ts),全部与源码同目录存放(co-located),例如slab-polygon.ts旁边就是slab-polygon.test.ts,找测试、补测试都不迷路。
如何跑测试:三种粒度
一键全量:bun run test
在仓库根目录执行:
bun run test # 等价于 turbo run test它通过 turbo.json 中的test任务驱动所有工作区。任务定义有两个关键点:
dependsOn: ["^build"]:先构建依赖包(多个包的测试从dist/导入产物);outputs: []:测试不产生缓存输出,避免脏缓存。
单包测试:bun --cwd切换目录
只改了一个包时,不必跑全量:
bun --cwd packages/core run test bun --cwd apps/editor run test单文件:直接指定路径
bun test apps/editor/lib/empty-graph-guard.test.ts测试写法非常直白,以 empty-graph-guard.test.ts 为例——它守护“空场景覆盖写入 74 节点真实场景”这类事故,describe+test+expect三步走,新手可以直接照抄:
import { describe, expect, test } from 'bun:test' describe('isEmptyGraphOverwrite', () => { test('blocks a 0-node write over a populated server copy', () => { expect(isEmptyGraphOverwrite(0, 74)).toBe(true) }) })新手避坑:为什么必须用bun run test而不是bun test
这是官方 CONTRIBUTING.md 里专门点名的一条:
用
bun run test,不要用裸bun test。
原因:test是 Bun 自己的子命令,直接敲bun test根本走不到 package.json 的脚本。Bun 的收集器会扫描它能找到的所有文件——包括dist/下的编译副本——导致测试数量虚高、结果失真。而bun run test会进入 Turborepo 链路:先构建依赖、再按各包自己限定作用域的脚本(如bun test src)执行。
另外 bunfig.toml 的[test]段预加载了 scripts/bun-preload-three.ts,提前把react和three求值一遍,绕开 R3F 生态 CJS/ESM 混用时的require() async module is unsupported竞态。你不需要关心它,但它解释了为什么这个项目能放心用 Bun 跑 React 相关测试。
进阶:性能基线与发布门禁
- 基准测试:
packages/core提供bun run bench:registry、bun run bench:schema,对 registry 与 schema 节点解析器 做性能回归; - 发布门禁:packages/cli 的
prepublishOnly串起了check-types → build → test → 打包运行时 → smoke 冒烟,测试不过发不出去; - 浏览器测试:packages/viewer/tests/ 下有独立 README 说明的浏览器端用例,与
bun test src的纯逻辑测试分工明确。
上手清单
- 安装 Bun 1.3+(Node 20.9+),
bun install装依赖 - 全量验证用
bun run test,日常开发用bun --cwd <包> run test - 新增功能时在源码旁补一个同目录
xxx.test.ts - 提交 PR 前再跑一次
bun run check(lint/format)+bun run test
掌握这套「Turbo 编排 + Bun 就近测试」的组织方式,你就能在 Pascal Editor 这个大型 Monorepo 里又快又稳地跑测试了。
【免费下载链接】editorOpen-source 3D architectural editor with a local CLI, MCP tools, and practical workflows for humans and AI agents.项目地址: https://gitcode.com/GitHub_Trending/editor93/editor
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考