🕌
MSW を使用しているテストが TransformStream is not defined エラーを出す
概要
MSW をアップデートしたところ、MSW を使用しているテストで TransformStream is not defined
というエラーが出た。その対応方法について。
環境
本日時点での、筆者が利用している各種ライブラリは以下の通り。
"jest": "^29.7.0",
"jest-environment-jsdom": "^29.7.0",
"msw": "^2.6.5",
Jest でテストを書いており、API のモックに MSW を利用している。
対応方法
Jest の環境設定ファイルに1行追加する。
import { EnvironmentContext, JestEnvironmentConfig } from "@jest/environment";
import { TestEnvironment } from "jest-environment-jsdom";
class CustomEnvironment extends TestEnvironment {
constructor(config: JestEnvironmentConfig, context: EnvironmentContext) {
super(config, context);
// ...その他のコード
this.global.TransformStream = TransformStream; // この行を追加
}
}
export default CustomEnvironment;
TransformStream
は @types/node
で定義されたインターフェイス。これを Jest 実行時のグローバルな型定義に追加している。
そもそもこのファイルが何かについては、 Jest のライブラリを参照してください → https://jestjs.io/docs/configuration
追記
そもそもこの問題は、MSW 本体ではなく間接依存している @mswjs/interceptors
で起こっていた。
Issue はこちら→ https://github.com/mswjs/interceptors/issues/663
ライブラリのコミッターによると、 jest-fixed-jsdom
を使ってね、と言っている。
が、このためだけにライブラリを追加するのは微妙…。というわけで、この記事で紹介したような少し forceful な対応方法を選択した。
Discussion