🦷
NestJSにswc/jestを導入してテストを早くする
swcを使う
こちらのスクラップ参考にしました。
@swc/coreと@swc/jest をインストールします。
.swcrc
ファイルをレポジトリのルートに作成し、以下を書きます。
.swcrc
{
"jsc": {
"parser": {
"syntax": "typescript",
"tsx": false,
"decorators": true,
"dynamicImport": false
},
// ターゲットは好きなやつを。ただドキュメントには
// Disable es3 / es5 / es2015 transforms と書いてあるので
// es2015以下は利用できない???
"target": "es2020",
"keepClassNames": true,
"transform": {
"legacyDecorator": true,
"decoratorMetadata": true
},
// パスエイリアスを利用しているなら以下2項目を編集する。利用してなければ削除。
// "baseUrl": "./",
// "paths": {
// "@/*": ["./src/*"]
// }
},
"module": {
"type": "commonjs",
"noInterop": false
},
"sourceMaps": true,
}
jest.config.js
を書き換えます。
jest.config.js
const config = {
moduleFileExtensions: ['js', 'json', 'ts'],
rootDir: './',
modulePaths: ['<rootDir>'],
testRegex: (/__tests__/.*|(\\.|/)(test|spec))\\.[jt]sx?$,
// グローバルセットアップとティアダウンがあれば以下を編集する。
// globalTeardown: '<rootDir>/src/share/teardownJest.ts',
// globalSetup: '<rootDir>/src/share/setupJest.ts',
transform: {
'^.+\\.(t|j)s$': ['@swc/jest'],
// デフォルトだとts-jest使っている。
// '^.+\\.(t|j)s$': 'ts-jest',
},
collectCoverageFrom: ['src/**/*.(t|j)s', '!src/**/*.d.ts'],
coverageDirectory: './coverage',
testEnvironment: 'node',
// path alias の設定。tsconfigに設定してあるがjest runner上ではそちらは有効にならない。もしパスエイリアスを利用しているならここにも書く。
// moduleNameMapper: {
// '^@/(.*)$': '<rootDir>/src/$1',
//},
};
module.exports = config;
注意点
- parserの内容は、TypeScriptなのかJavaScriptなのかNodeJSなのかReactなのかでかなり変わってくるので注意してください。
- パスエイリアスを利用している場合は、
baseUrl
とpaths
を記入する。利用していなければこれは書かなくて良い。 -
sourceMaps
を書かないとjestのカバレッジが動かなかった。 - targetは状況に応じて変える。
- .swcrcは自動で読まれる。
Discussion