news 2026/8/31 20:13:15

如何运行 Modly 测试套件?pytest + node --test 双测试体系完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何运行 Modly 测试套件?pytest + node --test 双测试体系完整指南

如何运行 Modly 测试套件?pytest + node --test 双测试体系完整指南

【免费下载链接】modlyDesktop app to generate 3D models from images or prompt using local AI — runs entirely on your GPU项目地址: https://gitcode.com/GitHub_Trending/mo/modly

Modly 是一款本地 AI 驱动的 3D 模型生成桌面应用,它的测试套件采用 pytest 命名 + node --test 的双测试体系:Python 侧覆盖api/后端,Node 侧覆盖前端与 Electron 主进程,一条npm test命令即可全量运行。本文带你快速理解这套体系并跑通全部用例 🧪

双测试体系总览

Modly 的代码分为两个世界:Python 后端(负责模型扩展进程管理)和TypeScript 前端(Electron + React 界面)。测试也相应拆成两条流水线,统一由 npm scripts 编排:

框架测试目录触发命令
Python 后端标准库unittestapi/tests/npm run test:py
Node.js / Electron原生node --test分散于src/electron/npm run test:node
全量npm test

三个命令的定义都集中在 package.json 中:

"test": "npm run test:py && npm run test:node", "test:py": "node scripts/run-pytests.mjs", "test:node": "node --test … "

💡小贴士:跑之前先执行一次npm install,并确保系统里有可用的 Python 3 解释器(详见 README.md 的开发环境章节)。

一键安装与运行步骤

完整流程只有两步:

npm install npm test

npm test会先跑 Python 侧,再跑 Node 侧,任何一侧失败都会以非零退出码终止,方便接入 CI。若还想做更严格的质量门禁,README.md 建议追加类型检查与构建:

./node_modules/.bin/tsc --noEmit -p tsconfig.node.json npm run build

Python 侧:为什么叫 run-pytests?

这是最容易让人困惑的地方 🤔 —— 脚本名字叫 scripts/run-pytests.mjs,但项目并没有依赖 pytest,实际调用的是 Python 标准库的unittest。这个脚本做了两件聪明的事:

  1. 跨平台解释器探测:依次尝试python3pythonpy -3(Windows 启动器),谁可用就用谁,找不到则报错退出;
  2. 测试发现:在api/目录下执行python -m unittest discover -s tests,自动收集所有测试文件。

目前包含两组用例:

  • api/tests/test_runner.py —— 验证扩展运行器的节点选择、manifest 元数据合并,以及扩展子进程的 newline-JSON 通信协议(recv/send);
  • api/tests/test_extension_process.py —— 验证扩展进程的 venv 解释器路径解析、缺失模块提取与自动修复映射等安全逻辑。

如果想单独手动运行Python 测试:

cd api python -m unittest discover -s tests

另外 tools/modly-cli/test_agent.py 是 CLI 工具的独立测试,可用python tools/modly-cli/test_agent.py单独执行。

Node 侧:node --test 如何直跑 TypeScript

Node 18 内置的node --test测试运行器是 Node 侧的核心,test:node实际上分两段执行:

第一段:TypeScript 测试文件

node --test --experimental-strip-types \ --experimental-loader ./scripts/node-ts-extensionless-loader.mjs \ src/shared/types/assetLibrary.test.ts …

两个关键参数值得理解:

  • --experimental-strip-types:让 Node 直接运行.ts文件(需要Node 22+);
  • --experimental-loader:加载自定义 scripts/node-ts-extensionless-loader.mjs,当import './foo'找不到模块时自动补上.ts后缀重试一次,解决了 TS 无扩展名导入的痛点。

第二段:JavaScript 测试文件(glob 通配)

node --test electron/main/*.test.mjs src/**/*.test.mjs

Node 侧覆盖的代表性用例:

测试文件关注点
electron/main/extension-path-guard.test.ts扩展 ID 安全校验,拒绝路径穿越与非法字符
electron/main/artifact-registry-service.test.ts工件注册服务
src/shared/types/assetLibrary.test.ts资产库能力分类与条目模型
src/areas/generate/assetLibraryService.test.ts资产库服务逻辑
src/areas/workflows/nodeBehaviors.test.mjs工作流节点行为
src/shared/utils/format.test.mjs格式化工具函数

这些用例都遵循统一风格:node:test定义用例 +node:assert/strict断言,零额外测试依赖。想单独调试某个文件时,直接:

node --test electron/main/extension-path-guard.test.ts

常见问题排查

症状原因与解法
No Python interpreter found (tried python3, python, py -3)系统缺少 Python 3,安装后重跑npm test
--experimental-strip-types报错Node 版本过低,升级到Node 22+
Python 侧 0 个用例被发现确认在仓库根目录执行,发现目录为 api/tests/
想看详细输出分别单独运行npm run test:pynpm run test:node分段观察

结语

Modly 的双测试体系体现了"少即是多"的工程哲学:Python 侧靠标准库 unittest,Node 侧靠原生 node --test,不引入任何重型测试框架。掌握npm test这一条命令后,你可以在贡献代码或排查问题前,先为整个本地 AI 3D 生成流水线做一次完整体检 ✅

相关模块路径速查

  • 测试编排入口:package.json
  • Python 可移植运行器:scripts/run-pytests.mjs
  • TS 无扩展名解析器:scripts/node-ts-extensionless-loader.mjs
  • 开发环境与测试说明:README.md

【免费下载链接】modlyDesktop app to generate 3D models from images or prompt using local AI — runs entirely on your GPU项目地址: https://gitcode.com/GitHub_Trending/mo/modly

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/31 20:13:10

menu html

HTML 分栏目录 基础 HTML 简介 HTML 骨架 html, xhtml, xml 基础语法 & 注释语法 标签 常用标签 简单的标签放在这里:label、textarea、script、small; html 语义化标签 h1~h6; header; nav;main; article; section; aside; footer; small; s…

作者头像 李华
网站建设 2026/8/31 20:10:00

Herdr事件订阅:构建实时代理状态监控面板

Herdr事件订阅:构建实时代理状态监控面板 【免费下载链接】herdr the runtime your coding agents live on 项目地址: https://gitcode.com/GitHub_Trending/her/herdr Herdr 事件订阅(events.subscribe)是构建实时代理状态监控面板的…

作者头像 李华
网站建设 2026/8/31 20:08:40

GLM-OCR Ollama本地部署教程:最简单的本地文档OCR方案

GLM-OCR Ollama本地部署教程:最简单的本地文档OCR方案 【免费下载链接】GLM-OCR GLM-OCR: Accurate Fast Comprehensive 项目地址: https://gitcode.com/GitHub_Trending/gl/GLM-OCR GLM-OCR 是一款面向复杂文档理解的多模态 OCR 模型(总参数量…

作者头像 李华
网站建设 2026/8/31 20:07:44

3步刷新你的Tracker列表:BT下载提速配置指南

3步刷新你的Tracker列表:BT下载提速配置指南 【免费下载链接】trackerslist Updated list of public BitTorrent trackers 项目地址: https://gitcode.com/GitHub_Trending/tr/trackerslist 如果你的下载慢,问题多半不在带宽。trackerslist 项目维…

作者头像 李华