async-storage SyntaxError 使用 Babel7 转译时出现意外标识符

async-storage SyntaxError Unexpected identifier while transpiling with Babel7

使用@react-native-community/async-storage 并在我的 react-native 环境中使用以下 npm 命令转译后。

"test": "NODE_ENV=test ./node_modules/.bin/mocha --timeout 5000 --require @babel/register \"./src/shared/__tests__/**/*.spec.js\""

我做了一些研究,但没有白费。但我发现它也发生在 Jest 身上。

这是我的babel.config.js

module.exports = {
  env: {
    production: {
    },
    test: {
      presets: [
        '@babel/preset-env'
      ],
    },
  },
};

我只测试非 jsx 代码,所以@babel/preset-env 似乎工作正常。

node_modules/@react-native-community/async-storage/lib/index.js:5
import AsyncStorage from './AsyncStorage';
       ^^^^^^^^^^^^

SyntaxError: Unexpected identifier

好像没人喜欢回答开玩笑的菜鸟问题....

无论如何,在开始学习玩笑时,我遇到了一些并不能反映实际错误的有趣错误信息。开发人员可以考虑一些可能的情况。

  1. 你没有嘲笑你的模块说 A_module 在 node_modules 里面,所以其中一个模块说 B_modules 在 A_modules 里面使用来自 React 的 NativeModules所以 Jest 无法执行测试。请查看堆栈跟踪或使用调试器找出您更喜欢模拟哪一个。
  2. 模拟一个使用NativeModules的模块(类似于第1点,但更直接简洁)
  3. 在继续之前,您需要更透彻地理解笑话。阅读文档很好,但当你认为合适时跳到示例。尤其是检查你真正需要的 examples 并阅读相关的。很多时候,不是你的 Babel 设置就是错误的 mocking 方法。
    1. 使用 jest.mock 而不是 jest.genMockFromModule。为什么?有一些函数或 init 函数会导致您的测试在此语句中崩溃。因为它调用 NativeModules 或开玩笑不允许的东西。改用模拟。

本题解答:请参考本.

谢谢