vscode中“运行测试”无反应需先安装启用deno扩展并确认deno cli已加入path;调试失败主因是launch.json未正确配置--inspect-brk、-a及--source-map等参数,且cwd与import-map路径须匹配。

VSCode 里点“运行测试”没反应?先确认 Deno 扩展和权限
VSCode 默认不识别 deno test,必须装官方 deno 扩展(作者:denoland),且确保它已启用。扩展启用后,VSCode 才会在测试文件(如 mod.test.ts)顶部显示“Run Test”/“Debug Test”按钮。
常见错误现象:No tests found 或按钮灰掉——大概率是工作区没开在 Deno 项目根目录,或当前文件没被 deno test 自动发现(比如文件名不含 .test. 或 _test.)。
- 检查 VSCode 左下角状态栏是否显示
Deno (v1.x);不显示说明扩展未激活或 Deno CLI 未加入$PATH - 终端执行
deno --version确认能调用;若报 command not found,请先用curl -fsSL https://deno.land/install.sh | sh安装并重开终端 - 确保
deno.json(或deno.jsonc)存在且配置了"tasks"或"tests"字段(非必需,但推荐)
点击 “Debug Test” 却卡住或报错 “Cannot connect to runtime process”
这是调试器启动失败的典型表现,根本原因是 VSCode 的 Deno 调试适配器默认尝试 attach 到一个已存在的 Deno 进程,但实际需要的是 launch 模式——即由 VSCode 主动拉起带调试支持的 deno test 进程。
解决方式是手动配置 .vscode/launch.json,不能只依赖扩展自动生成的配置。
- 在项目根目录建
.vscode/launch.json,内容至少包含:{ "version": "0.2.0", "configurations": [ { "name": "Deno Test", "type": "pwa-node", "request": "launch", "cwd": "${workspaceFolder}", "runtimeExecutable": "deno", "runtimeArgs": ["test", "--inspect-brk", "-A", "--no-check"], "attachSimplePort": 9229 } ] } -
--inspect-brk是关键:让 Deno 启动后暂停等待调试器连接;漏掉它,VSCode 就连不上 -
-A表示全权限(网络、读写等),测试中访问本地文件或发起 HTTP 请求时必须加,否则会因权限拒绝直接退出 - 如果测试用例本身含
Deno.exit()或异常未捕获,调试会提前终止——建议先用deno test --no-run确认语法无误
测试运行慢、热重载失效、或 import 报错 “Not found”
本质是 Deno 的模块解析和缓存机制与 Node.js 不同,VSCode 插件若没正确透传 --no-cache 或环境变量,就容易复用旧缓存或忽略 deno.json 中的 importMap 配置。
- 在
launch.json的runtimeArgs中加入--no-cache可强制跳过本地缓存,适合开发期频繁改依赖时使用 - 若项目用了
importMap,必须显式传入:"--import-map=import_map.json"(路径需相对于cwd) - VSCode 内置终端执行
deno test正常,但调试模式失败?检查launch.json中cwd是否指向了子目录(比如src/),导致 Deno 找不到根级import_map.json - Deno v1.38+ 默认启用
--no-check,但老版本仍需手动加,否则类型检查会拖慢启动速度
怎么让单个测试函数断点生效,而不是整个文件停住?
VSCode 的 Deno 调试器支持行断点,但前提是测试代码本身可被准确映射到源码位置——这要求 Deno 在运行时生成正确的 source map,并且 VSCode 能加载它。默认情况下,deno test 不生成 source map,必须加 --source-map 参数。
- 修改
launch.json的runtimeArgs,把"test"改成"test", "--source-map" - 断点只能打在
Deno.test()回调函数内部(比如await doSomething();那一行),不能打在Deno.test("name", () => { ... })外层——那属于 Deno 测试 runner 的代码,你没源码 - 如果用了
it.only或Deno.test({ only: true }),调试器只会进这个测试,其他跳过,适合聚焦排查 - 注意:
--source-map会略微增加启动时间,CI 环境不要加
cwd 和 --import-map 路径的相对关系,改一次 launch.json 很容易漏掉同步更新。











