Jestまたは任意の単体テストを実行するとき。テストはノード環境で実行されています。 したがって、ネイティブコンポーネント/ライブラリ(たとえば、Async StorageまたはSQLite)を持つモジュールにアクセスしようとすると、コードはtest envで破損します。
この問題を解決するため、Jestはモジュールモックを思いついた。 私のプロジェクトでは、内部的にネイティブモジュールを使用するnode_moduleに対して、それをグローバルモックを作成します。あなたは、単にそう
.
├── README.md
├── __mocks__
│ ├── base-64.js
│ ├── react-native-animatable.js
│ ├── react-native-config.js
│ ├── react-native-device-info.js
│ ├── react-native-fetch-blob.js
│ ├── react-native-firebase.js
│ ├── react-native-google-analytics-bridge.js
│ ├── react-native-map-markerclustering.js
│ ├── react-native-maps.js
│ ├── react-native-simple-download-manager.js
│ ├── react-native-simple-toast.js
│ ├── react-native-splash-screen.js
│ ├── react-native-testfairy.js
│ ├── react-native-version-number.js
│ └── react-native.js
├── __tests__
│ └── index.test.js
├── app
│ ├── App.container.js
│ ├── __tests__
│ ├── assets
│ ├── components
│ ├── config
│ ├── index.js
│ ├── language
│ ├── pages
│ ├── redux
│ ├── routes
│ ├── themes
│ └── utils
├── app.json
├── circle.yml
├── index.js
├── package.json
└── yarn.lock
のようにルートディレクトリにフォルダ__mocks__
を作成し、例として
__mocks__/react-native-firebase.js
module.exports = {
crash:() => ({
setCrashCollectionEnabled: jest.fn()
}),
auth:() => ({
signInAnonymously: jest.fn()
}),
database:() => ({
ref:() => ({
on: jest.fn()
})
}),
config:() => ({
fetch: jest.fn(),
setDefaults: jest.fn(),
getValue: jest.fn()
}),
messaging: jest.fn(() => ({
requestPermissions: jest.fn(),
subscribeToTopic: jest.fn(),
getToken: jest.fn(Promise.resolve),
onMessage: jest.fn(),
getInitialNotification: jest.fn(Promise.resolve),
onTokenRefresh: jest.fn()
}))
};
か多分__mocks__/react-native-device-info
を見てみましょうことを行うには
const mockmod = jest.genMockFromModule('react-native-device-info'); module.exports = mockmod;
ポイントが自動的にuは嘲笑モジュールを実行していますし、アプリのENVにあなたが持つことになりますテストのenvで結果uがrequire('react-native-device-info')
行うときに、これらのファイルを使用したテストのenv冗談中に..です実際のノードモジュール。