ts-jestではなくesbuild-jestを試してみる
開発にgoogleapisを使っているとtscが遅くなってしまったのでテストの実行だけでも早くならないかと思い調べるとesbuild-jestとswr-jestというのがあることを知った
aws-cdkの@aws-cdk/aws-lambda-nodejs
がbuildにesbuildを使っているので、esbuild-jestを試してみた。
tl;dr
なんかesbuild-jestのpackage.jsonに書かれているパッケージが見つからなくてエラーになったりするのでまだ手出さない方がいいかもしれない。
前提
ts-jestの環境を既に構築済みの人
インストール
取ってきて、jest.config.js
を少し書き換えるだけで簡単に実行できた。
yarn add -D esbuild-jest
module.exports = { testEnvironment: 'node', testMatch: ['**/*.test.ts'], transform: { // '^.+\\.tsx?$': 'ts-jest', '^.+\\.tsx?$': 'esbuild-jest', }, }
ハマったこと
jest.mockを書くとCannot find moduleエラーが起きる
ソースコード中にjest.mock
を書くとCannot find module '@babel/plugin-transform-modules-commonjs'
というエラーが出て動かなくなる。
一応自分でyarn add -D @babel/plugin-transform-modules-commonjs
を実行してパッケージをインストールするとここは突破できる
型アノテーションをつけるとエラーになる
自分で x: number
のような型アノテーションをつけると @babel/preset-typescript
等を使って型情報を外す必要があるということが SyntaxError
と共に表示される
これは@babel/preset-typescript
を追加してプロジェクトのpackage.json
に@babel/preset-typescript
の設定を書くとエラーが消える。
感想
自分のpackage.jsonに設定書き加えたり、依存モジュールが見つけられなかったりイマイチ原因がわからないエラーに当たるのは辛いがやっぱ早いのはいい事だよなと思って、最悪esbuild-jest
と書いたところをts-jest
に戻すだけで戻れるので使ってみてる。
またハマったという事ではないけど、カバレッジをとった時にts-jestとesbuild-jestで若干値が違ってるんだけど、どっちが正しいのかよくわからないという問題があるな〜とは思うが、そこまでカバレッジを意識するところまで行ってないので一旦esbuild-jestが出す値を目安くらいの気持ちで運用することにした。