如何生成完整Jest coverage文件夹?解决EPERM权限错误
运行npm run test:coverage时,覆盖率统计流程显示成功,但仅生成包含coverage-final.json的文件夹,未得到包含完整报告内容的coverage目录,同时抛出权限错误:
Failed to write coverage reports:
ERROR: Error: EPERM: operation not permitted, open 'D:\Programing\Wep\Development\Node Js\coverage\lcov.info'
我的package.json中scripts配置:
"scripts": { "test": "jest --config jestconfig.json", "test:coverage": "npm run test -- --coverage" }
jestconfig.json配置:
{ "transform": { "^.+\\.(t|j)s?$": "ts-jest" }, "testRegex": "(/__tests__/.*|(\\.|/) (test|spec))\\.(js?|ts?)$", "moduleFileExtensions": ["ts", "js"] }
期望:生成包含完整HTML、lcov等报告内容的coverage文件夹。
解决方案
1. 检查并修复文件夹权限
- 如果
coverage文件夹已存在,右键该文件夹 → 「属性」→「安全」,确认当前登录用户拥有读取、写入、修改权限;若权限不足,点击「编辑」添加对应权限。 - 若文件夹不存在,检查上级目录
D:\Programing\Wep\Development\Node Js的权限,确保jest有创建新文件夹并写入文件的权限。
2. 以管理员身份运行终端
关闭当前终端窗口,右键选择终端(CMD/PowerShell/VS Code内置终端)→「以管理员身份运行」,再重新执行npm run test:coverage。Windows下部分系统路径需要管理员权限才能完成文件写入操作。
3. 明确配置coverage参数并清理旧文件
修改jestconfig.json,指定报告格式和输出目录,同时开启清理旧文件的选项:
{ "transform": { "^.+\\.(t|j)s?$": "ts-jest" }, "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(js?|ts?)$", "moduleFileExtensions": ["ts", "js"], "coverageDirectory": "./coverage", "coverageReporters": ["json", "lcov", "text", "clover", "html"], "clearMocks": true, "collectCoverage": true }
之后手动删除已存在的coverage文件夹,再重新执行覆盖率命令。
4. 修复jest版本冲突
执行npm list jest查看项目中jest的版本情况,如果存在多版本冲突(比如全局jest和项目本地jest版本不一致),执行npm install jest@latest ts-jest@latest --save-dev更新到最新兼容版本,避免版本差异导致的文件写入异常。
5. 关闭占用文件的程序
检查是否有编辑器、杀毒软件、文件管理器等程序正在打开coverage目录下的文件,关闭这些程序后重新运行命令,避免文件被锁定导致无法写入。
内容的提问来源于stack exchange,提问作者bahaa adel

