testrunnerpath必须指向编译后的test入口文件(如out/test/runtest.js),而非.ts源码路径;项目用tsc编译则设为path.resolve(extensionpath, 'out/test'),用webpack则设为path.resolve(extensionpath, 'dist/test')。

VSCode插件开发中 testRunnerPath 指向哪里才有效
必须指向编译后的 runTest.js,不是 .ts 源码路径,否则 runTests() 启动时直接报 Error: Cannot find module ''。
-
extensionPath是插件根目录(含package.json),不是src/子目录 —— 这个搞错会导致activate()找不到、命令注册失败 - 项目用
tsc编译 →testRunnerPath = path.resolve(extensionPath, 'out/test') - 项目用 webpack 打包 →
testRunnerPath = path.resolve(extensionPath, 'dist/test') - CI 中
yarn build后必须确认out/目录存在,否则测试进程静默退出
为什么点击测试侧边栏的 ▶️ 没反应或报 Cannot find module 'playwright'
因为 VSCode 测试侧边栏默认走的是 Node.js 调试器路径,而 Playwright 测试必须由 Playwright Test 运行器接管,不能靠 "type": "node" 启动。
- 手动配置
launch.json时,"type"必须设为"playwright"(需已安装Playwright Test for VSCode插件) - 插件自动生成的绿色 ▶️ 图标只在
.spec.ts文件顶部生效,且文件必须放在tests/目录下 - 若误配成
"type": "node"+"program": "tests/example.spec.ts",会跳过所有 Playwright 生命周期,page和expect均未初始化
自定义测试面板需要支持多框架,但 Jest/pytest/Playwright 不能共存
不是技术限制,而是 VSCode 测试 API 的识别逻辑冲突:同一工作区只能激活一个测试适配器,后装的会覆盖前者的 testExplorer.registerTestProvider。
- Python 项目应只装
Python官方插件 +Test Explorer UI,禁用Jest Runner(即使package.json里有 jest) - TypeScript 插件开发项目,若同时含
jest.config.ts和playwright.config.ts,优先启用后者,前者测试用例不会出现在侧边栏 - 真要混合支持,得在插件代码里做运行时判断:读取
workspace.getConfiguration('jest')或检查playwright.config.ts是否存在,再动态注册对应 provider
测试面板里显示“passed”却没执行断言,问题出在 timeout 配置
现象是 await page.goto('https://...') 卡住 30 秒后直接跳到 expect() 并标记通过 —— 实际断言根本没跑。这不是代码 bug,是 playwright.config.ts 的超时策略导致的静默降级。
-
timeout: 30000(默认值)仅控制单步操作,不中断整个测试;页面卡死时它等满即过,不抛错 - 加
globalTimeout: 60000可强制整条用例超时退出,避免假阳性 - 若依赖网络服务,建议设
baseURL: 'http://localhost:3000'并配合webServer配置自动启停,比硬等更可靠
真正难的是让测试面板在不同项目类型间无缝切换:Q# 用 dotnet test、Python 用 pytest、TS 插件用 vscode-test,它们的生命周期、输出格式、错误解析规则全不一样。一个面板想统一展示,得自己实现至少三套结果解析器,而不是只改个 command 字符串。











