You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 08:25:18