playwright插件默认只识别项目根目录下tests/中的.spec.ts或.test.ts文件;若测试在src/tests中,需在playwright.config.ts中显式配置testdir: 'src/tests'并刷新测试资源管理器。

Playwright插件找不到测试,根本不是插件坏了,而是它默认只认 tests/ 目录下的 *.spec.ts 或 *.test.ts 文件——路径或后缀错一个,测试侧边栏就空着。
为什么测试文件在 src/tests 里却显示不出来
Playwright 插件不会递归扫描子目录,也不识别自定义命名(比如 e2e.test.js 或 playwright.spec.mjs)。它只按硬编码规则匹配:
- 必须位于项目根目录下的
tests/(不是src/tests、__tests__/或其他别名) - 文件扩展名必须是
.spec.ts、.spec.js、.test.ts、.test.js(大小写敏感) - 文件内必须有
import { test, expect } from '@playwright/test',且至少一个test()调用
如果你把测试放进了 src/tests/login.spec.ts,插件直接无视——它不读 tsconfig.json 或 jest.config.js 那套配置。
如何让插件支持自定义测试路径
靠改插件源码不行,得靠 playwright.config.ts 显式声明。插件启动时会读这个文件里的 testDir 和 testMatch:
- 在项目根目录创建或编辑
playwright.config.ts - 设置
testDir: 'src/tests'(路径相对于配置文件位置) - 如果用了非标后缀,加
testMatch: /.*\.e2e\.ts/ - 改完后重启 VSCode 或执行命令面板里的
Tests: Refresh Test Explorer
注意:testDir 不支持 glob 模式(比如不能写 'src/**/tests'),只能是单个相对路径字符串。
playwright.config.ts 不存在或格式错误的典型表现
插件会静默退回到默认行为(即只扫 tests/),但控制台不报错,容易误判为“插件没反应”。常见坑点:
- 配置文件名写成
playwright.config.js却导出的是module.exports = {},而项目用了 TypeScript —— 插件可能跳过加载 - 配置里写了
projects: [{ name: 'chromium', use: { ... } }],但漏了顶层use: { ... }或testDir,导致插件无法推断测试位置 - 文件里有语法错误(比如多了一个逗号),VSCode 不提示,但
npx playwright test会报错,插件则直接不加载
验证是否生效:在 VSCode 终端运行 npx playwright test --list,输出的测试路径必须和你配置的 testDir 一致。
调试时 test() 断点不触发的隐藏原因
即使测试文件出现在侧边栏,F5 调试也可能跳过断点——这往往是因为 launch.json 里的 args 没传对文件路径:
-
"args": ["test", "${fileBasename}"]只在当前打开的文件是tests/example.spec.ts时才有效;如果打开的是src/tests/login.spec.ts,就得改成"${relativeFile}" - 如果配置了多个
project,但args没带--project=chromium,Playwright 会按默认 project 运行,而那个 project 可能禁用了调试 -
--debug参数必须存在,否则 worker 进程不暴露调试端口,VSCode 连不上
最稳妥的 launch.json 配置片段:"program": "${workspaceFolder}/node_modules/.bin/playwright" + "args": ["test", "${relativeFile}", "--debug", "--project=chromium"]。
路径问题本质是 Playwright CLI 和 VSCode 插件之间的约定关系,不是“哪里都能跑”的灵活机制。一旦偏离 tests/ + *.spec.ts 这个默认组合,就必须在 playwright.config.ts 里白纸黑字写清楚,不能指望插件自动猜。











