🍵

jest + supertest, HTTP テストの例

2023/03/30に公開

概要:

jest + supertest, HTTP テストの例になります

  • express を使います

構成

  • jest
  • supertest
  • express

参考



npm add

mkdir sample
cd sample

#
npm init -y
#
npm install --save-dev jest supertest
#
npm i express

  • app.js: 適当にレスポンスを返すコード書きます
app.js
const express = require('express')
const app = express()

// GET
app.get("/", async (req, res) => {
  res.send({ status: "running" });
});

// POST
app.use(express.json());
app.post("/users", async (req, res) => {
  const { password, username } = req.body;
  if (!password || !username) {
    res.sendStatus(400);
    return;
  }
  res.send({ userId: 0 });
});

module.exports = app;

  • server.js
server.js
const app = require('./app')

app.listen(8081, () => {
  console.log('listening on port 8081!')
});

Test Code

  • app.test.js : エンドポント指定、request を渡す。
app.test.js


const request = require('supertest')
const app = require('./app.js')

describe("GET /", () => {
  test("check: running string", async () => {
    const response = await request(app).get("/");
    expect(response.body.status).toBe("running");
  });
});
//
describe("POST /users", () => {
  test("check: username, password, userId", async () => {
    const response = await request(app).post("/users").send({
      username: "user",
      password: "pass",
    });
    expect(response.body.userId).toBeDefined();
  });
  test("check: username, password rerurn HTTP 400", async () => {
    const bodies = [{ username: "user" }, { password: "pass" }, {}];
      for (const body of bodies) {
        const response = await request(app).post("/users").send(body);
        expect(response.statusCode).toBe(400);
      }
  });
});


  • package.json
....
  "scripts": {
    "test": "jest",
  },
....


Test

yarn test
  • 結果
$ yarn  test
yarn run v1.22.4
$ jest
 PASS  ./app.test.js

Test Suites: 2 passed, 2 total
Tests:       6 passed, 6 total
Snapshots:   0 total
Time:        0.927 s, estimated 1 s
Ran all test suites.
Done in 1.63s.


  • ファイル単体で実行
  • 実行するファイルパスを指定すると、実行できました。
# npm
npm run test ./src/test/unit/app.test.ts
#yarn
yarn test ./src/test/unit/app.test.ts

....

Discussion