我很难让Jest启动并运行我的RN expo项目(以便我可以玩耍并学习它)。
FAIL screens/HomeScreen.test.js
● Test suite failed to run
The Expo SDK requires Expo to run. It appears the native Expo modules are unavailable and this code is not running on Expo. Visit https://docs.expo.io to learn more about developing an Expo project.
at Object.<anonymous> (node_modules/expo/src/environment/validate.ts:11:9)
at Object.require (node_modules/expo/build/Expo.js:278:1)
FAIL __tests__/App-test.js
● Test suite failed to run
The Expo SDK requires Expo to run. It appears the native Expo modules are unavailable and this code is not running on Expo. Visit https://docs.expo.io to learn more about developing an Expo project.
at Object.<anonymous> (node_modules/expo/src/environment/validate.ts:11:9)
at Object.require (node_modules/expo/build/Expo.js:278:1)
PASS components/__tests__/StyledText-test.js (7.769s)
Test Suites: 2 failed, 1 passed, 3 total
Tests: 1 passed, 1 total
Snapshots: 1 passed, 1 total
Time: 10.477s
Ran all test suites.
package.json
{
"main": "node_modules/expo/AppEntry.js",
"scripts": {
"start": "expo start",
"android": "expo start --android",
"ios": "expo start --ios",
"eject": "expo eject",
"test": "jest --watchAll"
},
"jest": {
"preset": "react-native",
"transformIgnorePatterns": [
"node_modules/(?!((jest-)?react-native|react-clone-referenced-element|expo(nent)?|@expo(nent)?/.*|react-navigation|sentry-expo))"
]
},
"dependencies": {
"@expo/samples": "2.1.1",
"expo": "^32.0.0",
"react": "16.5.0",
"react-native": "https://github.com/expo/react-native/archive/sdk-32.0.0.tar.gz",
"react-navigation": "^3.0.9"
},
"devDependencies": {
"babel-preset-expo": "^5.0.0",
"jest": "^24.7.1",
"react-test-renderer": "^16.8.6"
},
"private": true
}
.babelrc
{
"presets": ["react-native"]
}
答案 0 :(得分:1)
我认为您的错误出在jest
文件的package.json
键中,您的Babel配置预设也是错误的。
首先将"jest-expo": "^32.0.0"
添加到devDependencies
(因为使用的是SDK 32),然后必须将package.json
中的笑话密钥更改为:
"jest": {
"preset": "jest-expo",
}
将.babelrc
的预设密钥更改为:presets: ['babel-preset-expo']
。或将其删除并创建一个包含以下内容的babel.config.js
文件(推荐):
module.exports = api => {
api.cache(true);
return {
presets: ['babel-preset-expo'],
};
};
如果仍然无法解决问题,请检出jest-expo项目,它应该为您指明正确的方向。或者发表评论,我会编辑答案来帮助您。