Jest测试遇EACCES权限错误:mkdir操作被拒绝的解决方案咨询
解决Jest测试时fs.mkdirSync权限拒绝问题
以下是针对本地Linux环境下Jest测试出现EACCES权限错误的具体解决方法:
1. 修正路径为绝对路径
本地运行和Jest测试的工作目录可能不一致,导致相对路径./public指向的目录并非预期位置。
- 替换相对路径为基于项目根目录的绝对路径,示例代码:
import path from 'path'; // 拼接绝对路径,确保无论在哪执行都指向项目根目录下的public const folderPath = path.resolve(process.cwd(), 'public/uploads/jobCVs', jobId); fs.mkdirSync(folderPath, { recursive: true }); process.cwd()会返回当前Node进程的工作目录,Jest运行时默认会以项目根目录为工作目录,这样能保证路径一致性。
2. 检查并修复目录权限
本地public目录或其父目录的权限可能限制了Jest进程的读写:
- 手动设置
public目录的所有者和权限,在终端执行:chown -R $USER:$USER public chmod -R 755 public - 这会将目录所有者改为当前用户,并赋予读写执行权限(确保Jest运行的用户能创建子目录)。
3. 调整Jest沙箱配置
Jest的默认沙箱可能会限制文件系统的同步操作,可修改Jest配置文件(jest.config.js或jest.config.ts):
- 添加或修改以下配置:
module.exports = { testEnvironment: 'node', sandboxInjectedGlobals: ['process'], // 或者直接禁用沙箱(仅在必要时使用,可能影响测试隔离性) // sandbox: false }; testEnvironment: 'node'确保测试运行在Node环境而非浏览器模拟环境,避免不必要的文件系统限制。
4. 确认Jest运行的用户身份
如果是通过IDE(如VS Code)运行Jest,IDE的进程用户可能和终端用户不同:
- 尝试在终端手动执行Jest命令:
npm test或yarn test,看是否仍出现权限问题。 - 若终端运行正常,检查IDE的运行权限设置,确保其以当前用户身份启动。
内容的提问来源于stack exchange,提问作者Kévin WITZ
相关产品推荐
相关产品推荐

