🐺
mswをexpressで動かす
はじめに
msw
をbrowser
起動ではなく、Node.js
でserver
として起動でする方法がないか調査しました。
結論
msw
をexpress
で動かす
import express from "express";
import bodyParser from "body-parser";
import { handlers } from "./handlers";
import { createMiddleware } from '@mswjs/http-middleware'
console.log("Mock server is running");
const app = express();
app.use(bodyParser.json());
app.use(createMiddleware(...handlers));
// Start the server
const PORT = 3334;
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});
技術選定
今回作成するにあたり利用したライブラリ
- express
- @types/express
- msw v2系
- @mswjs/http-middleware
- tsx
expressでサーバーの構築
import express from "express";
console.log("Mock server is running");
const app = express();
// Start the server
const PORT = 3334;
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});
mswのhandlerを作成する
msw
でmock
するAPI
を作成し、@mswjs/http-middleware
で登録します。
import express from "express";
import { createMiddleware } from '@mswjs/http-middleware'
import { handlers } from './handlers'
console.log("Mock server is running");
const app = express();
app.use(createMiddleware(...handlers))
// Start the server
const PORT = 3334;
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});
@mswjs/http-middleware
@mswjs/http-middleware
はmsw
のリクエストハンドラーを活用して、
HTTPサーバーを起動したり、既存のサーバーにミドルウェアとして組み込むためのライブラリです。
本記事では、既存のサーバーに対してmock
を適応したいケースでしたので、createMiddleware
を採用しています。
サーバー自体を起動させたい場合は、createServer
を使用することで実現できます。
import { http, HttpResponse } from 'msw'
import { createServer } from '@mswjs/http-middleware'
const httpServer = createServer(
http.get('/user', () => {
return HttpResponse.json({ firstName: 'John' })
}),
)
httpServer.listen(9090)
サーバーの実行
tsx
で起動させています。
tsx --watch app.ts
localhost:9090
に対してcurl
すればmsw
でmock
したレスポンスが帰ります。
Discussion