20

React Native のドキュメントのテスト セクションでは、Jest が単体テストを行う公式の方法であることが示唆されています。ただし、セットアップ方法については説明していません。セットアップなしで Jest を実行すると、React Native コードが使用する傾向がある変換 (ES6 機能、JSX、Flow など) が適用されないため、構文エラー (行番号なし:( ) が発生しますjestSupport。React Native ソース トライにフォルダーがあります。と が含まれてenv.jsおりscriptPrerocess.js、後者には変換を適用するためのコードがあります。したがって、それらをプロジェクトにコピーし、package.json に次のセクションを追加しました。

  "jest": {
    "scriptPreprocessor": "jestSupport/scriptPreprocess.js",
    "setupEnvScriptFile": "jestSupport/env.js"
  },

これで最初のエラーは修正されますが、それでも次のエラーが発生します。

Using Jest CLI v0.4.0
 FAIL  js/sync/__tests__/SynchronisedStorage-tests.js
SyntaxError: /Users/tom/my-project/js/sync/__tests__/SynchronisedStorage-tests.js: /Users/tom/my-project/js/sync/SynchronisedStorage.js: /Users/tom/my-project/node_modules/react-native/Libraries/react-native/react-native.js: /Users/tom/my-project/node_modules/react-native/node_modules/react-tools/src/browser/ui/React.js: /Users/tom/my-project/node_modules/react-native/node_modules/react-tools/src/utils/ReactChildren.js: /Users/tom/my-project/node_modules/react-native/node_modules/react-tools/src/addons/ReactFragment.js: /Users/tom/my-project/node_modules/react-native/node_modules/react-tools/src/classic/element/ReactElement.js: /Users/tom/my-project/node_modules/react-native/node_modules/react-tools/src/core/ReactContext.js: /Users/tom/my-project/node_modules/react-native/node_modules/react-tools/src/vendor/core/warning.js: Unexpected token .
1 test failed, 0 tests passed (1 total)
Run time: 0.456s

Jest に React Native を理解させるために必要なことは他にありますか? React Native をテストするための Jest セットアップの例はありますか?

編集:

もちろん、React Native全体が含まれているscriptPreprocessファイルでの実行を停止するチェックインがありました。node_modulesそれを削除すると、上記のエラーが修正されます。ただし、React Native ソースからより多くのエラーが発生するようになりました。Jest 内で実行することを意図していないようです。

EDIT2:

react-nativeモジュールのモックを明示的に設定すると動作します:

jest.setMock('react-native', {});

これは非常に手作業になり、React Native API と頻繁にやり取りするコードのテストにはあまり役に立たないようです。私は間違いなくまだ何かが足りないと感じています!

4

3 に答える 3