ゆずめも

メモ的なブログです。主に勉強した事について書いてます。

ts-jestではなくesbuild-jestを試してみる

開発にgoogleapisを使っているとtscが遅くなってしまったのでテストの実行だけでも早くならないかと思い調べるとesbuild-jestとswr-jestというのがあることを知った

github.com

github.com

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の設定を書くとエラーが消える。

Cannot transform the imported binding xxxxx since it's also used in a type annotation · Issue #57 · aelbore/esbuild-jest · GitHub

感想

自分のpackage.jsonに設定書き加えたり、依存モジュールが見つけられなかったりイマイチ原因がわからないエラーに当たるのは辛いがやっぱ早いのはいい事だよなと思って、最悪esbuild-jestと書いたところをts-jestに戻すだけで戻れるので使ってみてる。

またハマったという事ではないけど、カバレッジをとった時にts-jestとesbuild-jestで若干値が違ってるんだけど、どっちが正しいのかよくわからないという問題があるな〜とは思うが、そこまでカバレッジを意識するところまで行ってないので一旦esbuild-jestが出す値を目安くらいの気持ちで運用することにした。