概要
表題の通り、mswのバージョン2を使ってみた。
この記事を書いた動機
Webに落ちているほとんどの記事がバージョン1についてだったため、使用するのにちょっと戸惑ったから。
まあ、公式ドキュメントを最初に読めば良いだけの話だけなのだが。
Reactで使ってみる
基本は公式ドキュメント通りにやればよろしだが、以下に残しておく。
セットアップ
$ npm install msw --save-dev $ npx msw init public/ --save
Reactはブラウザーで実行されるため、ブラウザの設定をする。
こうするとブラウザからのリクエストをブラウザ上でインターセプトしてくれる(多分)。
src/mock/browser.ts を作成
import { setupWorker } from 'msw/browser'
import { handlers } from './handlers'
export const worker = setupWorker(...handlers)
dev環境でのみモックするように設定
import React, { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import App from "./App";
async function enableMocking() {
if (process.env.NODE_ENV !== "development") {
return;
}
const { worker } = await import("./mocks/browser");
return worker.start();
}
const rootElement = document.getElementById("root") as HTMLElement;
const root = createRoot(rootElement);
enableMocking().then(() => {
root.render(
<StrictMode>
<App />
</StrictMode>
);
});
ハンドラーを作ってみる
ここがv1との違いかな。rest が http になった。
src/mock/handlers.ts を作成
import { http, HttpResponse } from "msw";
export const handlers = [
http.get("https://backend.example.com/api/v1/hello", () => {
return HttpResponse.json(
{
message: "Hello, World!",
who: "I am msw."
}
);
}),
];
ReactからAPIを叩いてみる
const BASE_URL = 'https://backend.example.com/api/v1';
export const fetchHello = async () => {
try {
const response = await fetch(`${BASE_URL}/hello`);
const data = await response.json();
return data;
} catch (error) {
console.error('Error fetching hello', error);
}
};
export default fetchHello;
これだけ。便利だね。