我正在尝试开玩笑以处理一个新的 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 = true
和 global.DEV = true
。我曾尝试将 setupFiles
添加到 jest.config.js
,它加载了一个包含 setup.js
的 global.DEV = true
文件。我也尝试更新 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
答案 0 :(得分:0)
变量名为 __DEV__
,因此通过反复试验使用 DEV
没有意义。在测试中设置它无济于事,因为它不会影响导入时变量的使用。为了做到这一点,这应该在 setupFiles*
文件中的测试之前完成。
Jes globals
配置选项应该这样做。应该有"globals": { "__DEV__": true }
。 package.json 中的配置被 jest.config.js 中的配置覆盖。其中应该只有一个(可能是后者),另一个需要删除。