Jest 如何只运行单个测试文件
用 npx jest --runTestsByPath tests/math.test.js 精确运行一个文件;普通位置参数按路径模式匹配,-t 按测试名称正则过滤。附 watch 与初始化配置说明。
一句话回答:精确运行一个路径用 npx jest --runTestsByPath tests/math.test.js。普通位置参数按路径正则匹配,npx jest math.test.js 可能匹配多份同名文件;再加 -t 'add' 可按测试完整名称的正则过滤用例。
常用方式
npx jest math.test.js # 按文件名
npx jest tests/unit/ # 按目录
npx jest math # 部分路径模糊匹配
npx jest math.test.js -t "add" # 只跑名称含 add 的用例
配合 npm scripts:npm test -- math.test.js(-- 后的参数传给 jest)。
精确到单个用例
npx jest math.test.js -t "add function"
-t 用正则匹配测试完整名称(包括外层 describe),不是纯子串比较。代码里也可以临时用 test.only(...) 独占执行。
watch 模式里的技巧
npx jest --watch
watch 模式下按 p 输入文件名模式、按 t 输入用例名过滤——开发时边改边跑单文件的标准姿势。
提速与排障参数
npx jest math.test.js --verbose # 逐条列出用例结果
npx jest math.test.js --coverage # 顺带看覆盖率
npx jest math.test.js --detectOpenHandles # 跑完不退出时查未关闭句柄
npx jest math.test.js --runInBand # 串行执行(排除并发干扰)
常见问题(FAQ)
Q:jest math.test.js 提示 "No tests found"?
A:Jest 的 testMatch/testRegex 没匹配到它。确认文件在项目约定位置(默认认 *.test.js、*.spec.js、__tests__ 目录),路径写相对项目根的路径;monorepo 里要在对应包目录下执行。
Q:为什么跑单文件还是加载了很多东西?
A:setupFiles/setupFilesAfterEnv 和全局配置照样加载。如果全局 setup 很重(如建测试库),可用 --setupFiles 覆盖或把重逻辑挪到按需 fixture。
Q:跑单个文件时 mock 不生效?
A:检查 jest.mock() 的模块路径是相对于测试文件的——直接跑单文件时工作目录不同不影响模块解析,但如果用了 moduleNameMapper 别名,确认 jest 配置生效(--config 指定)。
参考资料
本文依据官方资料核对,未进行现场运行测试;代码与配置示例需结合实际版本、权限和环境验证。