🕌

MSW を使用しているテストが TransformStream is not defined エラーを出す

2024/11/20に公開

概要

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