【问题标题】:Test runner (jest) failing to import expo modules测试运行器(开玩笑)未能导入 expo 模块
【发布时间】: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 存储库中创建stackoverflow.com/help/mcve 吗?
  • @riwu - 上面的例子是一个 MCVE。如果您有一个仅包含该 import 语句的文件,然后使用 jest 命令运行它,您将收到此错误消息。也许您需要在后面添加 it('dummy test', () => { expect(1).toBe(1) }); 行,以防开玩笑需要实际测试来运行文件。

标签: react-native jestjs expo


【解决方案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 包。当所有三个版本相同时,一切正常。
猜你喜欢
  • 2019-09-21
  • 2020-01-07
  • 2020-12-21
  • 2020-06-11
  • 2020-09-17
  • 2022-12-05
  • 1970-01-01
  • 2021-08-14
  • 2018-09-25
相关资源
最近更新 更多