React Native-开玩笑:自更新至0.56以来已损坏。如何解决?

时间:2018-07-05 17:58:44

标签: reactjs react-native jestjs babel babel-jest

自从升级到新的React Native版本以来,我的测试就被破坏了。

环境

这是我的环境:

React Native Environment Info:
System:
  OS: macOS High Sierra 10.13.4
  CPU: x64 Intel(R) Core(TM) i7-7920HQ CPU @ 3.10GHz
  Memory: 486.81 MB / 16.00 GB

  Shell: 3.2.57 - /bin/bash
Binaries:
  Node: 9.4.0 - /usr/local/bin/node
  npm: 6.1.0 - /usr/local/bin/npm
  Watchman: 4.9.0 - /usr/local/bin/watchman
SDKs:
  iOS SDK:
    Platforms: iOS 11.4, macOS 10.13, tvOS 11.4, watchOS 4.3
IDEs:
  Android Studio: 3.1 AI-173.4697961
  Xcode: 9.4.1/9F2000 - /usr/bin/xcodebuild
npmPackages:
  react: 16.4.1 => 16.4.1
  react-native: 0.56.0 => 0.56.0
npmGlobalPackages:
  create-react-native-app: 1.0.0
  react-native-cli: 2.0.1
  react-native-git-upgrade: 0.2.7

说明

尝试测试我新创建的动作创建者时,npm test会引发以下错误:

jest

 FAIL  app/actions/logout/logout.test.js
  ● Test suite failed to run


    Plugin 0 specified in "/Users/jan/Startup/react-native/ordersome/node_modules/babel-preset-react-native/index.js" provided an invalid
property of "default" (While processing preset: "/Users/jan/Startup/react-native/ordersome/node_modules/babel-preset-react-native/index.js
")

      at Plugin.init (node_modules/babel-core/lib/transformation/plugin.js:131:13)
      at Function.normalisePlugin (node_modules/babel-core/lib/transformation/file/options/option-manager.js:152:12)
      at node_modules/babel-core/lib/transformation/file/options/option-manager.js:184:30
          at Array.map (<anonymous>)
      at Function.normalisePlugins (node_modules/babel-core/lib/transformation/file/options/option-manager.js:158:20)
      at OptionManager.mergeOptions (node_modules/babel-core/lib/transformation/file/options/option-manager.js:234:36)
      at node_modules/babel-core/lib/transformation/file/options/option-manager.js:265:14
      at node_modules/babel-core/lib/transformation/file/options/option-manager.js:323:22
          at Array.map (<anonymous>)
      at OptionManager.resolvePresets (node_modules/babel-core/lib/transformation/file/options/option-manager.js:275:20)

我在Google上搜索量很大,找不到解决方法。似乎与babel有关。

可复制的演示

很容易复制(当前)。我尝试使用react-native init启动了一个新项目。然后,我只是创建了一个随机的.test.js文件,并在其中编写了文档的入门测试:

function sum(a, b) {
  return a + b;
}

test("adds 1 + 2 to equal 3", () => {
  expect(sum(1, 2)).toBe(3);
});

接下来,我运行'npm test',它给出了上面的错误。

4 个答案:

答案 0 :(得分:9)

@J。 Hesters解决方案几乎是正确的。但是不必安装babel,只需添加转换即可解决问题。

{
  ...
  "jest": {
    "preset": "react-native",
    "transform": {
      "^.+\\.js$": "<rootDir>/node_modules/react-native/jest/preprocessor.js"
    }
  }
  ...
}

我以前的回答有一些副作用,直到尝试重建整个react-native应用程序后,我才看到。所以请不要使用它。

上级答案

实际上与本机反应0.56无关。是由babel预设5引起的,只需还原此程序包就可以解决问题。

yarn add babel-preset-react-native@4.0.0

答案 1 :(得分:7)

这是我修复它的方式。

添加

"@babel/core": "^7.0.0-beta.47",
"babel-core": "^7.0.0-beta.47",

到您的package.json,然后运行npm install。这为我解决了这个问题。

此外,您必须添加酶

   "transform": {
      "^.+\\.js$": "<rootDir>/node_modules/react-native/jest/preprocessor.js"
    }

为您在package.json中的配置开玩笑。

如果您想获得更全面的修复,请查看this github issue.

答案 2 :(得分:2)

我犯了同样的错误,并且我还添加了:

"transform": {
      "^.+\\.js$": "<rootDir>/node_modules/react-native/jest/preprocessor.js"
    }

但是后来我在另一个模块中遇到另一个错误,要忽略它,您需要将此代码添加到setup.jest.js文件中:

jest.mock('react-native-router-flux', () => {
    return {
        Crashlytics: {
            crash: () => {},
        },
        Answers: {
            logCustom: () => {},
            logContentView: () => {},
        },
    }

因此,在执行完此代码后,笑话将忽略测试中“ react-native-router-flux”模块中的错误。

答案 3 :(得分:0)

问题出在0.56.0。

  

唯一的解决方案是在v0.55.4上运行

可以通过以下方式安装v0.55.4:npm i --save react-native@0.55.4

,或在运行应用程序时运行:react-native run-android --version 0.55.4

这对我有所帮助,希望对我有帮助