web-dev-qa-db-ja.com

React Native-Jest:0.56にアップデートしてから壊れています。修正するにはどうすればよいですか?

新しいReactネイティブバージョンにアップグレードして以来、私のテストは壊れています。

環境

これが私の環境です:

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)

私はグーグルでひどくググって、修正を見つけることができません。それはバベルと関係があるようです。

再現可能なデモ

(現在)再現は簡単です。 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」を実行すると、上記のエラーが発生します。

6
J. Hesters

これが私がそれを修正した方法です。

追加

"@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で設定をjestします。

より徹底的な修正を確認したい場合は、 このgithubの問題を確認してください。

7
J. Hesters

@J。ヘスターズの解決策はほぼ正しいです。ただし、babelをインストールする必要はありません。変換を追加するだけで、問題が解決します。

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

私の以前の回答は全体を再構築しようとした後、反応し、ネイティブアプリケーションまでを私は見なかったことに、いくつかの副作用があります。使用しないでください。

前の回答

実際には、react-native0.56とは何の関係もありません。これは、babelプリセット5が原因で発生します。このパッケージを元に戻すだけでうまくいきます。

yarn add [email protected]

9
Kanekotic

私も同じ間違いを犯しました、そしてまた私は付け加えました:

"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: () => {},
        },
    }

したがって、このコードの後、jestはテストの「react-native-router-flux」モジュールのエラーを無視します。

2
Max

問題は0.56.0にあります。

唯一の解決策は、v0.55.4で実行することです

次の方法でv0.55.4をインストールします。npm i --save [email protected]

または、次のユーザーが実行するアプリを実行する場合:react-native run-Android --version 0.55.4

これは私を助けました、それが役立つことを願っています

0