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

时间:2019-06-13 16:37:26

标签: react-native mocha babel asyncstorage

使用@ 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 test fails after installing react-native-async-storage

这是我的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 个答案:

答案 0 :(得分:0)

似乎没有人喜欢回答开玩笑的新手问题。...

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

  1. 您没有嘲笑您的模块说在node_modules内部的A_module,所以其中一个模块说A_modules内部的B_modules使用react的NativeModules,因此Jest无法执行测试。请查看堆栈跟踪或使用调试器找出要模拟的对象。
  2. 模拟使用NativeModules的模块(类似于第1点,但更直接和简洁)
  3. 在继续操作之前,您需要更全面地了解玩笑。阅读文档很好,但是在您认为合适时可以跳到示例。尤其要查看您真正需要的examples并阅读相关内容。很多时候,您的Babel设置或模拟方法都不正确。
    1. 使用jest.mock代替jest.genMockFromModule。为什么?有一些函数或init函数会使您的测试在此语句时崩溃。因为它调用NativeModules或开玩笑不允许的东西。改用模拟。

此问题的解决方案:请参阅此most updated solution

谢谢