0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

mswについて

Posted at

MSWの基本

Mock Service Worker(MSW)は、サービスワーカーを利用してネットワークリクエストを捕捉し、カスタマイズされたレスポンスを返すことでAPIのモックを簡単に作成できるJavaScriptのライブラリです。これにより、実際のバックエンドサービスが完成する前でも、フロントエンドの開発を進めることができます。

サービスワーカーとは

サービスワーカーは、Webページとは独立してバックグラウンドで動作するスクリプトで、Webブラウザが提供する技術の一つです。サービスワーカーは、プロキシサーバーのように動作し、ネットワークリクエストをインターセプトして処理することができます。これにより、オフラインでのページアクセスの向上、バックグラウンドデータ同期、プッシュ通知の送信、ネットワークリクエストのキャッシュ管理など、多岐にわたる機能を実現することが可能です。

MSWの設定方法

まず、npmやyarnを使ってMSWをプロジェクトにインストールします。

$ npm install msw --save-dev
$ npx msw init public --save

APIのモッキング

モックを設定する際は、handlers配列にAPIエンドポイントごとに定義します。これにより、異なるAPIリクエストに対して具体的なレスポンスを模擬できます。

src/mocks/handlers.ts
import { rest } from 'msw'

export const handlers = [
  rest.get('/users', (req, res, ctx) => {
    return res(
      ctx.status(200),
      ctx.json([{ id: 1, name: 'John Doe' }])
    )
  }),
  // 他のAPIエンドポイントに対するモックをここに追加
]

ハンドラーを呼び出す処理

src/mocks/browser.ts
import { setupWorker } from 'msw'
import { handlers } from './handlers'

export const worker = setupWorker(...handlers)

workerを起動させる処理

src/index.tsx
if (process.env.NODE_ENV === "development") {
  const { worker } = require("./mocks/browser");
  worker.start();
}

使用シーン

  • フロントエンドの動き&デザインを確認すること
  • jestでAPIを呼ぶ部分のテスト
  • seleniumなどでBEを使わずブラウザを通したテスト

便利だと感じること

  • バックエンドの開発を待たずにフロントエンドの開発ができること
  • バックエンドとフロントエンドでリポジトリを完全に分けても開発が可能
  • handlerを少しいじるだけでレスポンスのステータス&中身を変えることができるため異常系の確認が楽
  • レスポンスが返ってくるまでの時間を調整できる

使ってみて反省点

  • 突き詰めすぎるとBEの再開発になってしまう
    • リクエストに応じてresponseを変えることができるが完璧にしようとしてmock実装に時間をかけてしまった

解決できていない課題

  • 更新&refetchするパターンの実装の時に値を変えるにはどうすればよいか
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?