【问题标题】:Jest - ReferenceError: __DEV__ is not defined (React Native)开玩笑 - ReferenceError: __DEV__ 未定义 (React Native)
【发布时间】:2021-09-06 13:33:09
【问题描述】:

我正试图开玩笑地处理一个新的react-native 项目。但是,当我运行npm run test 时,我收到以下错误ReferenceError: __DEV__ is not defined。我查看了无数关于此的 Github 问题和 Stack Overflow 帖子,但没有一个建议对我有用。

这是我的jest.config.js 文件:

module.exports = {
    transformIgnorePatterns: [
       "node_modules/(?!(react-native|react-native-button|react-native-video)/)"
    ],  
    setupFiles: ['<rootDir>/__tests__/setup.json'],  
}

package.json(注意我在 "jest" 中添加了 DEV = true)

{
  "name": "DigitalSignagePlayer",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "android": "react-native run-android",
    "ios": "react-native run-ios",
    "start": "react-native start",
    "test": "jest",
    "lint": "eslint ."
  },
  "dependencies": {
    "@react-native-async-storage/async-storage": "^1.15.5",
    "axios": "^0.21.1",
    "react": "^17.0.1",
    "react-native": "0.64.2",
    "react-native-fs": "^2.18.0",
    "react-native-splash-screen": "^3.2.0",
    "react-native-video": "^5.1.1"
  },
  "devDependencies": {
    "@babel/core": "^7.14.5",
    "@babel/preset-env": "^7.14.7",
    "@babel/runtime": "^7.14.5",
    "@react-native-community/eslint-config": "^2.0.0",
    "babel-jest": "^27.0.2",
    "eslint": "^7.28.0",
    "jest": "^27.0.5",
    "metro-react-native-babel-preset": "^0.66.0",
    "react-test-renderer": "17.0.1"
  },
  "jest": {
    "preset": "react-native",
  }

}

bable.config.js

module.exports = {
  presets: ['module:metro-react-native-babel-preset', '@babel/preset-env'],
  
};

metro.config.js

/**
 * Metro configuration for React Native
 * https://github.com/facebook/react-native
 *
 * @format
 */

module.exports = {
  transformer: {
    getTransformOptions: async () => ({
      transform: {
        experimentalImportSupport: false,
        inlineRequires: true,
      },
    }),
  },
};

我尝试在我的测试文件顶部设置globals.DEV = trueglobal.DEV = true。我曾尝试将setupFiles 添加到jest.config.js,这会加载一个包含global.DEV = truesetup.js 文件。我也尝试过更新jest。我当前的react-native 版本是:

react-native-cli: 2.0.1
react-native: 0.64.2

我也在使用 Metro,而不是 Expo,我最初使用 react-native-cli 创建了该应用程序。

更新:

setup.json

{
    "globals": { "__DEV__": true } 
}

更新 2:

我将setup.json 更改为setup.js,但仍然出现同样的错误:

 global.__DEV__ = true

【问题讨论】:

    标签: javascript reactjs react-native jestjs


    【解决方案1】:

    变量名为__DEV__,因此通过反复试验使用DEV 没有意义。在测试中设置它不会有帮助,因为它不会影响导入时变量的使用。为了做到这一点,这应该在测试setupFiles* 文件之前完成。

    Jes globals 配置选项应该这样做。应该有"globals": { "__DEV__": true }。 package.json 中的配置被 jest.config.js 中的配置覆盖。应该只有一个(可能是后者),另一个需要删除。

    【讨论】:

    • 我无法让您的建议生效。我已更新问题以反映我的更改。
    • 'globals' 应该位于 jest.config.js 中,检查 jestjs.io/docs/configuration 。 setupFiles 应该是 js 文件,而不是 json。
    • 不幸的是,我无法让它工作。我为我的问题添加了一些更新。
    • 目前还不清楚它的样子。 package.json 中应该没有jest,只有 jest.config.js。 jest.config.js 中应该有setupFiles: ['&lt;rootDir&gt;/setup.js'],setup.js 应该位于测试之外,因为它不是测试。故意在 setup.js 中犯语法错误以确保它已加载。
    猜你喜欢
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-12
    • 2021-09-17
    • 2016-09-26
    • 2020-03-17
    • 2020-05-29
    • 2022-10-16
    相关资源
    最近更新 更多