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

React中Jest运行报错:需添加类私有方法Babel插件

Jest测试报错:Class private methods are not enabled

执行npm run test时出现以下报错:

Class private methods are not enabled. Please add `@babel/plugin-proposal-private-methods` to your configuration.
      71 |       : this.#createParallelTestRun(tests, watcher);
      72 |   }
    > 73 |   async #createInBandTestRun(tests, watcher) {
         |   ^
      74 |     process.env.JEST_WORKER_ID = '1';
      75 |     const mutex = (0, _pLimit().default)(1);
      76 |     return tests.reduce(

当前babel.config.js配置

module.exports = {
        presets: [
          '@babel/preset-env',
          '@babel/preset-react',
          '@babel/preset-flow',
        ],
        plugins: [
          'babel-plugin-styled-components',
          '@babel/plugin-proposal-class-properties',
        ]
      }

当前jest.config.js配置

/* eslint-disable no-undef */
module.exports = {
  collectCoverage: true,
  // on node 14.x coverage provider v8 offers good speed and more or less good report
  coverageProvider: 'v8',
  collectCoverageFrom: [
    '**/*.{js,jsx,ts,tsx}',
    '!**/*.d.ts',
    '!**/node_modules/**',
    '!<rootDir>/out/**',
    '!<rootDir>/.next/**',
    '!<rootDir>/*.config.js',
    '!<rootDir>/coverage/**',
  ],
  moduleNameMapper: {
    // Handle CSS imports (with CSS modules)
    '^.+\\.module\\.(css|sass|scss)$': 'identity-obj-proxy',
 
    // Handle CSS imports (without CSS modules)
    '^.+\\.(css|sass|scss)$': '<rootDir>/__mocks__/styleMock.js',
 
    // Handle image imports
    '^.+\\.(png|jpg|jpeg|gif|webp|avif|ico|bmp|svg)$/i': '<rootDir>/__mocks__/fileMock.js',
 
    // Handle module aliases
    '^@/components/(.*)$': '<rootDir>/components/$1',
  },
  // Add more setup options before each test is run
  // setupFilesAfterEnv: ['<rootDir>/jest.setup.js'],
  testPathIgnorePatterns: ['<rootDir>/node_modules/', '<rootDir>/.next/'],
  testEnvironment: 'jsdom',
  transform: {
    // Use babel-jest to transpile tests with the next/babel preset
    '^.+\\.(js|jsx|ts|tsx)$': ['babel-jest', { presets: ['next/babel'] }],
  },
  transformIgnorePatterns: [
    '\\.(png|jpg|jpeg|gif|webp|svg)$',
  ],
}

解决方案

  • 安装缺失的Babel插件
    执行命令安装@babel/plugin-proposal-private-methods:

    npm install --save-dev @babel/plugin-proposal-private-methods
    
  • 更新babel.config.js配置
    在plugins数组中添加该插件:

    module.exports = {
            presets: [
              '@babel/preset-env',
              '@babel/preset-react',
              '@babel/preset-flow',
            ],
            plugins: [
              'babel-plugin-styled-components',
              '@babel/plugin-proposal-class-properties',
              '@babel/plugin-proposal-private-methods' // 添加这一行
            ]
          }
    
  • 清除缓存并重新测试
    执行以下命令清除Jest和项目缓存,避免旧缓存干扰:

    npm run test -- --clearCache
    rm -rf node_modules/.cache
    npm run test
    
  • 检查Jest的transform配置(可选)
    若上述步骤无效,确认next/babel预设能读取项目根目录的babel.config.js,或尝试将Babel配置直接写入jest的transform选项中,同时确保next/babel版本与Babel插件版本兼容。

内容的提问来源于stack exchange,提问作者Iván Meyer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:58:12