Open2
supertest で Express のテストを書くのが楽すぎる
Express のテストをうまいことやりたい
という欲求がある。
というか Express だけでなく、なんらかのリクエストを送信して、レスポンスを受け取る、とかそういうやつのテストを書くときは大体苦労する。
なので、とりあえず簡単に解決する方法として、 supertest を利用して実際にリクエストを投げる、というやり方を書いておく。
作業ログ
まずは supertest のインストール。
$ npm install -D supertest
Express のベースになっているファイルから、パスを定義している部分を外に切り出す。というか、要するにパス定義とリッスン定義を切り離す。
そうしないと、ファイルを読み込んだときに実際にリッスンしてしまい、テストが終了しなくなってしまうのだ。
app.ts
import express from "express";
const app = express();
app.get("/", (_, res) => {
res.json({ status: "ok" });
});
export default app;
index.ts
import app from "./app";
const port = process.env.PORT;
app.listen(port, () => console.log(`Running the app on port: ${port}`));
その後、テストを書く。
import request from "supertest";
import app from "@/src/app";
describe("GET /", () => {
it("returns 200", async () => {
const result = request(app).get("/");
expect(result.statusCode).toBe(200);
});
});