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

React Native中Detox运行TypeScript测试时出现import模块语法错误

React Native Detox TypeScript测试报错:Cannot use import statement outside a module

运行Detox TypeScript测试时出现如下语法错误:

SyntaxError: Cannot use import statement outside a module

Details:

      import { NativeModules } from 'react-native';
      ^^^^^^

    SyntaxError: Cannot use import statement outside a module

      1 | import axios, { AxiosInstance } from 'axios';
      2 | import { isEmpty } from 'lodash';
    > 3 | import VersionNumber from 'react-native-version-number';
          ^^^^^^

错误源于测试文件导入的类,该类依赖了其他模块;若测试文件无import语句,则可正常运行。

已花费数小时调整jest.config.js但未解决问题。查资料得知需用Babel将ES6代码及import语句转译为CommonJS后,再交由Detox/Jest处理,但因配置选项繁多,不清楚具体操作方式。

当前配置文件

jest.config.js

/* eslint-disable @typescript-eslint/no-var-requires */
const { pathsToModuleNameMapper } = require('ts-jest');

const { compilerOptions } = require('../tsconfig.json');

/** @type {import('@jest/types').Config.InitialOptions} */
module.exports = {
  rootDir: '..',
  testMatch: ['<rootDir>/e2e/**/*.test.ts'],
  testTimeout: 120000,
  maxWorkers: 1,
  globalSetup: 'detox/runners/jest/globalSetup',
  globalTeardown: 'detox/runners/jest/globalTeardown',
  reporters: ['detox/runners/jest/reporter'],
  testEnvironment: 'detox/runners/jest/testEnvironment',
  verbose: true,
  preset: 'ts-jest',
  moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths, { prefix: '<rootDir>/' }),
};

babel.config.js

module.exports = {
  presets: [
    'module:metro-react-native-babel-preset',
    '@babel/preset-typescript',
    ['@babel/preset-env', { targets: { node: 'current' } }],
    '@babel/plugin-transform-modules-commonjs',
  ],
  plugins: [
    [
      'module-resolver',
      {
        root: ['./src'],
        extensions: ['.ios.js', '.android.js', '.js', '.ts', '.tsx', '.json'],
        alias: {
          '@app': './src',
          '@assets': './assets',
        },
      },
    ],
    ['module:react-native-dotenv', { envName: 'DOTENV', moduleName: '@env' }],
  ],
  env: {
    production: {
      plugins: ['transform-remove-console'],
    },
  },
};

.detoxrc.js(仅相关代码)

/** @type {Detox.DetoxConfig} */
module.exports = {
  testRunner: {
    args: {
      $0: 'jest',
      config: 'e2e/jest.config.js',
    },
    jest: {
      setupTimeout: 120000,
    },
  },
  apps: {...},
  devices: {...},
  configurations: {...},
};

已尝试的资料

已查阅并尝试以下资料中的方案,但未解决问题:

  • 《How to resolve "Cannot use import statement outside a module" from Jest when running tests?》
  • Detox仓库中关于"Cannot use import statement outside a module"的相关issue
  • Jest官方文档中ECMAScript Modules章节

内容的提问来源于stack exchange,提问作者Yuniac

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:24:57