开玩笑:测试套件无法运行(Expo SDK 需要 Expo 才能运行)
Posted
技术标签:
【中文标题】开玩笑:测试套件无法运行(Expo SDK 需要 Expo 才能运行)【英文标题】:Jest: Test suite failed to run (The Expo SDK requires Expo to run) 【发布时间】:2019-09-21 10:00:41 【问题描述】:我很难让 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"]
【问题讨论】:
【参考方案1】:我认为您的错误在您的package.json
文件中的jest
键中,并且您的 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 项目,它应该会为您指明正确的方向。或者发表评论,我会编辑答案以帮助您。
【讨论】:
当我查看您链接到的项目时,我在package.json
?? 中看不到笑话?
@norfeldt 抱歉,显然我忘记将一些代码推送到该分支,但您必须将 jest-expo
添加到您的 devDependencies
并按照我告诉您的配置进行操作。我将更新我的答案以包含此内容。
@norfeldt 将链接更改为另一个应该对您有更多帮助的项目。
转储.babelrc
并安装jest-expo
(再次)并将开玩笑预设更改为jest-expo
就可以了。谢谢!现在它只是在大喊App-test.js
(一定是在expo init
期间创建的)说SyntaxError: Unexpected identifier
for import React from 'react';
.. 这似乎永远不会结束
您也可以从您的devDependencies
中删除jest
,因为jest-expo
包含自己的jest
分布。以上是关于开玩笑:测试套件无法运行(Expo SDK 需要 Expo 才能运行)的主要内容,如果未能解决你的问题,请参考以下文章
开玩笑:测试套件无法运行,SyntaxError:意外的令牌导入