测试运行器(开玩笑)未能导入 expo 模块

Posted

技术标签:

【中文标题】测试运行器(开玩笑)未能导入 expo 模块【英文标题】:Test runner (jest) failing to import expo modules 【发布时间】:2019-01-07 02:33:11 【问题描述】:

我正在为 React Native 应用程序编写一些组件测试。我正在使用expoBarCodeScanner 作为我的一个组件。在我的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 的供应商捆绑包

OCUnit/XCode 单元测试的优秀测试运行器

鼻子测试运行器找到除标签之外的所有测试

实习生 JS 有 mocha 测试运行器吗

XCTest 测试运行器在完成运行测试之前以代码 -1 退出

ReSharper 的单元测试运行器有快捷键吗?