React Nativeのドキュメントの テストセクション は、Jestがユニットテストを行う公式の方法であることを示唆しています。ただし、セットアップ方法については説明していません。セットアップなしでJestを実行すると、Reactネイティブコードが使用する傾向がある変換(ES6機能、JSX、フローなど)が適用されないため、構文エラーが発生します(行番号なし:())。 React Native source tryには、env.js
とscriptPrerocess.js
を含むjestSupport
フォルダーがあり、後者には変換を適用するためのコードがあります。それらを私のプロジェクトにコピーし、次のセクションを私の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を理解させるために必要なことは他にありますか?テストするJestセットアップの例はありますかReact Native?
編集:
scriptPreprocess
にチェックがあり、node_modules
内のファイルの実行を停止しました。もちろんReact Native)全体が含まれていました。これを削除すると、上記のエラーが修正されます。 。ただし、Reactネイティブソースからより多くのエラーが発生しています。これは、Jest内で実行するためのものではないようです。
EDIT2:
react-native
モジュールのモックを明示的に設定すると機能します。
jest.setMock('react-native', {});
これは非常に手動で行われるようで、React Native APIと相互作用するコードのテストにはあまり役立ちません。まだ何かが足りないような気がします!
JestをReactネイティブアプリケーションで動作させました。ES6およびES7トランスフォームを含むファイルで問題なくテストを実行しています。
Jestを機能させるために、私は次の手順に従いました。
jestSupport
フォルダーをReactネイティブマスターリポジトリからreact-native
のnode_modules
フォルダーにコピーしました。
packages.json
の「jest」行を編集してjestSupport
フォルダー内のファイルを指すようにしました
私のpackages.json
の「jest」行は次のようになります:
"jest": {
"scriptPreprocessor": "<rootDir>/node_modules/react-native/jestSupport/scriptPreprocess.js",
"setupEnvScriptFile": "<rootDir>/node_modules/react-native/jestSupport/env.js",
"testFileExtensions": [
"js"
],
"unmockedModulePathPatterns": [
"source-map"
]
},
React Native v0.37.0以降、Jestは新しいアプリテンプレートの一部です。
新しいアプリでは、すぐにテストを実行できます。
$ react-native init MyAwesomeApp
$ cd MyAwesomeApp
$ npm test
...
Tests: 2 passed
jest の新しいバージョンの場合、react-native
の設定は非常に簡単です。
を使用してjestをインストールします
npm install --save-dev jest-cli babel-jest
package.json
に、これを追加します
"scripts": {
"start": "babel-node ./server/server.js",
"import-data": "babel-node ./scripts/import-data-from-parse.js",
"update-schema": "babel-node ./server/schema/updateSchema.js",
"test": "jest",
"lint": "eslint ."
},
"jest": {
"haste": {
"defaultPlatform": "ios",
"platforms": [
"ios",
"Android"
],
"providesModuleNodeModules": [
"react-native"
]
}
},
Jestに関連する行を追加するだけでよい場合があります
今、あなたは使用することができます
npm test
冗談を実行します。
詳細については、 f8app のgithubリポジトリを参照してください。