私はts-jest(JestおよびTypeScript)を使用しており、すべてのテストスイートに対してグローバルなセットアップを構成したい(テストデータベースを初期化する)。
Jest構成にはglobalSetup
オプションがあることがわかりました。
"jest": {
"globalSetup": "./jest-config.js"
}
ただし、セットアップには.js
ファイルのみを使用できます。 .ts
ファイルを使用したいのは、TypeScriptでのセットアップ用のコードを含むすべてのコードが含まれているためです。
どうすればこれを達成できますか?
私は解決策を見つけました。
私の最初のプロジェクト構造は次のとおりです。
_.
|--src
| |--service.ts
|--tests
| |--service.test.ts
|--dist
|--tsconfig.json
|--package.json
_
Package.jsonのJest設定:
_"jest": {
"globals": {
"ts-jest": {
"tsConfigFile": "tsconfig.json"
}
},
"moduleFileExtensions": ["ts","js"],
"transform": {
"^.+\\.(ts|tsx)$": "./node_modules/ts-jest/preprocessor.js"
},
"testMatch": [
"**/tests/**/*.test.(ts|js)"
],
"testEnvironment": "node"
}
_
この構成を使用すると、_ts-jest
_は.tsファイルのメモリトランスコンパイルを実行します。 _tsconfig.json
_のoutDir
にcompilerOptions
オプションがありますが、そのoutDirには何も書かれておらず、トランスポートされたjest-config.jsを使用できないためです。
その後、srcのテストフォルダーを移動し、Jest configを変更します。プロジェクトの新しい構造は次のとおりです。
_.
|--src
| |--service.ts
| |--tests
| |--service.test.ts
| |--jest-config.ts
|--dist
|--tsconfig.json
|--package.json
_
新しいJest設定は次のとおりです。
_"jest": {
"globalSetup": "./dist/tests/jest-config.js",
"moduleFileExtensions": ["ts", "js", "json"],
"testMatch": [
"**/dist/**/*.test.js"
],
"testEnvironment": "node"
}
_
これで、Jestのグローバル設定にjest-config.jsを使用できます。
添加
Jestセットアップファイル(私の例ではjest-config.js)は、1つの非同期関数をエクスポートする必要があります。
module.exports = async function() { ... }
テストを実行する前に、ソース.tsファイルをコンパイルする必要があります。