sublime text 本身不运行测试,但可通过配置构建系统(如 pytest.sublime-build)实现一键执行;关键需确保 working_dir、解释器路径和 selector 三者准确匹配项目结构与语法作用域,否则 ctrl+b 将报错或静默失败。

Sublime Text 本身不运行测试,但能通过构建系统把 pytest 或 jest 的执行过程“一键化”,关键在路径、解释器和触发时机三者对齐——错一个,Ctrl+B 就只报错不跑测试。
配置 pytest.sublime-build 时 working_dir 和 $file 要严格匹配项目结构
很多人写完 pytest.sublime-build 后按 Ctrl+B 报 ModuleNotFoundError,根本原因是 working_dir 没设对,导致 Python 找不到被测模块或 conftest.py。
-
"working_dir": "${file_path}"仅适用于测试文件和被测代码在同一目录(如test_calc.py和calc.py并列) - 若项目是标准包结构(
src/myapp/+tests/test_calc.py),必须设为"working_dir": "${project_path:${folder}}",并确保src/在PYTHONPATH中或用-p src参数 - 避免用
$file直接传整个路径(如tests/test_calc.py),应改用$file_base_name配合--pyargs:命令改为["pytest", "--pyargs", "$file_base_name", "-v"],前提是文件名符合test_*.py规范且在 Python path 下可 import
selector 写错会导致 Ctrl+B 完全没反应
Sublime 的构建系统靠 selector 判断当前文件类型是否启用该构建。Python 测试文件如果语法高亮是 source.python,但你写了 source.py,Ctrl+B 就静默失败——连错误都不报。
- 确认当前文件实际语法类型:按
Ctrl+Shift+P→ 输入Set Syntax: Python,确保状态栏显示 “Python” 而非 “Python 3” 或其他变体 - 检查
selector值是否与 Sublime 内部 scope 一致:打开命令面板 →Developer: Show Scope Name,光标处会显示类似source.python meta.function.python,取最前面的source.python即可 - JS/TS 测试要覆盖多后缀:用
"selector": "source.js, source.jsx, source.ts, source.tsx",漏掉source.tsx就无法在 React+TS 文件里触发 Jest
pytest 运行失败却看不到完整 traceback
默认构建输出被截断,只显示前几行,真正出错的 AssertionError 或导入异常可能藏在后面,让人误以为“没跑起来”。
- 在构建配置中加
"shell": true(尤其 Windows 下 cmd 环境),否则某些环境变量(如PYTHONPATH)不生效 - 把
"cmd"改成调用 shell 脚本更可控:例如 Linux/macOS 下用["sh", "-c", "cd '${file_path}' && python -m pytest '$file' -v --tb=short"],--tb=short强制精简 traceback,避免刷屏 - 如果仍看不到错误,临时在
cmd末尾加2>&1(Linux/macOS)或2>&1(Windows),确保 stderr 也输出到构建面板
想让测试结果直接跳转到失败行?得靠 output_regex
Sublime 构建系统原生支持解析错误输出并生成可点击的跳转链接,但需要正则精准匹配文件名、行号——否则点不了,只能手动翻。
- 对
pytest,在构建配置中加入:"output_regex": "^.*?([^\s]+\.py):([0-9]+):",它能捕获test_calc.py:42:这类格式 - 注意:这个正则必须和 pytest 实际输出一致。若用了
--tb=line,输出是test_calc.py:42: AssertionError,上面的正则就有效;若用--tb=short,开头多了空格或路径,就得改成"^\s*([^\s]+\.py):([0-9]+):" - JS 测试(Jest)默认不输出标准格式,需加
--testLocationInResults参数,并配正则:"output_regex": "at ([^\s]+):([0-9]+):([0-9]+)"
最容易被忽略的是:Sublime 的构建系统不会自动重载环境变量。改了 PYTHONPATH 或装了新包,必须重启 Sublime,否则 Ctrl+B 仍用旧环境。这点不像 VS Code 会动态读取 shell 启动配置。











