簡體   English   中英

在我的 React Native 應用程序中使用 jail-monkey package 后,Jest 測試開始失敗並顯示“無法在模塊外使用導入語句”

[英]Jest tests started failing with "Cannot use import statement outside a module" after using jail-monkey package in my React Native application

我有一個 React Native 應用程序,我在其中安裝並使用 jail-monkey 來檢查設備是否已植根。 一旦我添加它,我的一些 Jest 測試就開始失敗並出現以下錯誤:

SyntaxError: Cannot use import statement outside a module
> 3 | import JailMonkey from 'jail-monkey';

谷歌搜索后,我發現了這個堆棧溢出線程,它有很多答案,但都沒有幫助我。 話雖如此,我想這個問題與 babel 和 jest 配置有關 - 如何解決 jest 中的“無法在模塊外使用導入語句”

我的babel.config.js看起來像這樣:

module.exports = {
    presets: ['module:metro-react-native-babel-preset'],
    plugins: [
        [
            require.resolve('babel-plugin-module-resolver'),
            {
                cwd: 'babelrc',
                extensions: ['.ts', '.tsx', '.ios.tsx', '.android.tsx', '.js'],
                alias: {
                    '@src': './src',
                },
            },
        ],
        [
            'module:react-native-dotenv',
            {
                moduleName: 'react-native-dotenv',
            },
        ],
        // Reanimated needs to be at the bottom of the list
        'react-native-reanimated/plugin',
    ],
};

我的jest.config.js看起來像這樣:

const { defaults: tsjPreset } = require('ts-jest/presets');

/** @type {import('@jest/types').Config.InitialOptions} */
module.exports = {
    ...tsjPreset,
    preset: 'react-native',
    transform: {
        '^.+\\.jsx$': 'babel-jest',
    },
    // Lists all react-native dependencies
    // that don't have compiled ES6 code
    // and need to be ignored by the transformer
    transformIgnorePatterns: [
        'node_modules/(?!(react-native' +
            '|react-navigation-tabs' +
            '|react-native-splash-screen' +
            '|react-native-screens' +
            '|react-native-reanimated' +
            '|@react-native' +
            '|react-native-vector-icons' +
            '|react-native-webview' +
            ')/)',
    ],
    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
    moduleNameMapper: {
        // Help Jest map the @src's added by babel transform
        '^@src(.*)$': '<rootDir>/src$1',
        // Allow Jest to mock static asset imports
        '\\.(jpg|jpeg|png|gif|eot|otf|webp|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$':
            '<rootDir>/__mocks__/assetMock.js',
        // Mock SVG Component imports (from React Native SVG)
        '\\.svg': '<rootDir>/__mocks__/svgMock.js',
    },
    setupFiles: ['./jest.setup.js'],
    setupFilesAfterEnv: ['@testing-library/jest-native/extend-expect'],
};

我通過在jest.config.js上的transformIgnorePatterns中包含jail-monkey和它們 mocking jailmonkey.js解決了這個問題。 在我的例子中,我在__mocks__/jail-monkey/index.js上有一個包含以下內容的文件:

export default {
  jailBrokenMessage: () => '',
  isJailBroken: () => false,
  androidRootedDetectionMethods: {
    rootBeer: {
      detectRootManagementApps: false,
      detectPotentiallyDangerousApps: false,
      checkForSuBinary: false,
      checkForDangerousProps: false,
      checkForRWPaths: false,
      detectTestKeys: false,
      checkSuExists: false,
      checkForRootNative: false,
      checkForMagiskBinary: false,
    },
    jailMonkey: false,
  },
  hookDetected: () => false,
  canMockLocation: () => false,
  trustFall: () => false,
  isOnExternalStorage: () => false,
  isDebuggedMode: () => Promise.resolve(false),
  isDevelopmentSettingsMode: () => Promise.resolve(false),
  AdbEnabled: () => false,
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM