🐷
jest実行時にsentry-expoに関連するエラー
経緯
jestを実行する際に、sentry-expoに関する下記のようなエラーが出ていた。
いくつかの記事を参考にテストが通るように修正したので、その手順を記録として残しておこうと思います。
● Test suite failed to run
Jest encountered an unexpected token
This usually means that you are trying to import a file which Jest cannot parse, e.g. it's not plain JavaScript.
By default, if Jest sees a Babel config, it will use that to transform your files, ignoring "node_modules".
Here's what you can do:
• If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/en/ecmascript-modules for how to enable it.
• To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
• If you need a custom transformation specify a "transform" option in your config.
• If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option.
You'll find more details and examples of these config options in the docs:
https://jestjs.io/docs/en/configuration.html
Details:
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){export { Severity, Status, } from "@sentry/types";
^^^^^^
SyntaxError: Unexpected token 'export'
at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1350:14)
at Object.<anonymous> (node_modules/sentry-expo/src/integrations/bare.ts:5:
テストを通すためにやったこと
- jest.setup.js の作成
アプリのルートディレクトリ配下に、 jest.setup.js
ファイルを作成する。
ファイル内に下記を記載する。
jest.mock("sentry-expo", () => ({
init: () => jest.fn(),
captureException: () => jest.fn(),
}));⏎
package.json
内のjestの設定に jest.setup.js
を読み込む設定を追加
"jest": {
"preset": "jest-expo",
"setupFiles": ["./jest.setup.js"] // <- 追加
},
- AsyncStorage用のMockの作成
この時点で下記のようなエラーが出ていたためエラーメッセージ中のリンクを参考に、AsyncStorageをモック化する。
● Test suite failed to run
[@RNC/AsyncStorage]: NativeModule: AsyncStorage is null.
To fix this issue try these steps:
• Rebuild and restart the app.
• Run the packager with `--reset-cache` flag.
• If you are using CocoaPods on iOS, run `pod install` in the `ios` directory and then rebuild and re-run the app.
• If this happens while testing with Jest, check out docs how to integrate AsyncStorage with it: https://react-native-async-storage.github.io/async-storage/docs/advanced/jest
If none of these fix the issue, please open an issue on the Github repository: https://github.com/react-native-async-storage/async-storage/issues
at Object.<anonymous> (node_modules/@react-native-async-storage/async-storage/lib/commonjs/AsyncStorage.native.ts:23:9)
at Object.<anonymous> (node_modules/@react-native-async-storage/async-storage/lib/commonjs/index.ts:1:1)
__mocks__/@react-native-async-storage/async-storage.js
というディレクトリおよびファイルを作成する。
ファイル内に下記を記載する。
export { default } from '@react-native-async-storage/async-storage/jest/async-storage-mock'
- もしうまく動かない場合、node_modulesを再インストール
rm -rf node_modules
yarn
Discussion