MSW vs nock: どちらのAPIモックツールを選ぶか
MSWはブラウザとNodeの双方でネットワーク層でrequestをインターセプトし、nockはサーバーテスト向けにモジュールレベルでNodeのHTTPをインターセプトします。
MSW(Mock Service Worker)はrequestのhandlerを一度定義してネットワーク境界でインターセプトし、ブラウザ(Service Worker経由)とNodeで動作するため、同じmockがunit test、コンポーネントテスト、さらにはローカル開発にも役立ちます。nockはNodeのHTTP層にpatchを当てて送信requestをインターセプト・検証し、Node/サーバーのテストに純粋に特化しています。MSWは環境をまたいだ再利用と忠実度で優れ、nockは特化した成熟したNodeのHTTPモッカーとして優れます。
| MSW | nock | |
|---|---|---|
| 環境 | ブラウザ + Node | Nodeのみ |
| インターセプト | ネットワーク層 | NodeのHTTPモジュール |
| 再利用 | テスト + 開発 + storybook | サーバーテスト |
| 忠実度 | 高い(実際のネットワーク経路) | モジュールレベル |
| 最適な用途 | フロント/バック共通の汎用mock | NodeのHTTPテストのmock |
ユースケースとスコープ
MSWは、ブラウザテスト、コンポーネントテスト、Storybook、ローカル開発をまたいで単一のhandlerセットが欲しいチームに適しています。nockは、送信HTTPをモジュールレベルでインターセプト・検証するだけでよいNode/サーバーのテストスイートに適しています。MSWの環境横断の到達範囲が際立った特長で、nockの特化はサーバー専用のmockをシンプルに保ちます。
テストとCI
どちらもCIでheadlessに動作し、MSWのNode統合はコンポーネントテストとunit testをカバーし、nockはサーバー呼び出しをカバーします。いずれもmanaged runnerで動作し、高速なrunnerはmockした統合スイートを短縮します。
結論
ブラウザ、Node、テスト、開発をまたぐ単一のmock層が欲しいなら: MSW。サーバーテスト向けの特化したNodeのHTTPインターセプターが欲しいなら: nock。MSWは汎用的で万能な選択肢、nockはNode専用の軽量なスペシャリストです。