测试运行器(开玩笑)未能导入 expo 模块
Posted
技术标签:
【中文标题】测试运行器(开玩笑)未能导入 expo 模块【英文标题】:Test runner (jest) failing to import expo modules 【发布时间】:2019-01-07 02:33:11 【问题描述】:我正在为 React Native 应用程序编写一些组件测试。我正在使用expo
的BarCodeScanner
作为我的一个组件。在我的jest
测试中,我有一行写着import BarCodeScanner from 'expo';
。仅此行(没有在我的测试代码中进一步使用它的任何内容)会导致以下错误:
Expo SDK 需要 Expo 才能运行。似乎是原生 Expo 模块 不可用,并且此代码未在 Expo 上运行。访问 https://docs.expo.io 了解有关开发世博项目的更多信息。
有人知道如何将BarCodeScanner
导入我的测试文件吗?
【问题讨论】:
显然在运行测试时没有完整的 expo 应用程序运行,我假设这就是问题所在。不过,我希望有办法解决这个问题! 您可以在snack.expo.io 或Github 存储库中创建***.com/help/mcve 吗? @riwu - 上面的例子是一个 MCVE。如果您有一个仅包含该 import 语句的文件,然后使用jest
命令运行它,您将收到此错误消息。也许您需要在后面添加 it('dummy test', () => expect(1).toBe(1) );
行,以防开玩笑需要实际测试来运行文件。
【参考方案1】:
我做了一些挖掘,看来这是 Expo 和 Jest 的常见问题。目前有几个与 Jest 测试相关的未解决问题:
https://github.com/expo/expo/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+jest
这里的一个解决方案引起了我的兴趣:
https://github.com/expo/expo/issues/1705
如果您创建自己的 Jest 设置文件并在其中“require()”expo 组件并将 expo 和 expo-jest 降级到 v26,它就会出现。上面链接中的示例:
package.json:
...
"jest":
"preset": "jest-expo",
"setupTestFrameworkScriptFile": "./setupJest"
,
...
setupJest.js:
require('stacktrace-parser');
希望这对您有所帮助。如果您有任何疑问,请告诉我您的情况,如果可能的话,我会进一步挖掘:)
【讨论】:
谢谢。下周当我回到 React Native 开发时,我会试试这个,并会在这里更新。我会给你赏金,因为你是迄今为止唯一回应的人,这个答案似乎很有希望! 我在将expo
+ expo RN 版本更新到 30.0 时遇到了同样的错误,但忘记碰撞jest-expo
包。当所有三个版本相同时,一切正常。以上是关于测试运行器(开玩笑)未能导入 expo 模块的主要内容,如果未能解决你的问题,请参考以下文章
如何在 karma 测试运行器中包含来自 webpack 的供应商捆绑包