🕌
【テストフレームワーク】Supertestまとめ【Express】
Supertestとは
主にExpressの結合テストに用いられるツール
HTTPリクエストをシミュレート、サーバーのエンドポイントが正しく動作するか確認するために使う
JavascriptのテストフレームワークであるJestを組み合わせることで、
効率的にExpressアプリの結合テストができる
Supertestのメリット
-
結合テストが簡単にできる
-
E2Eテストが行える
-
Expressと相性がいい
-
Jestとの組み合わせが簡単にできる
-
エラーハンドリングのテストケースも可能
使い方
Supertestの導入
yarn add --dev supertest
Typescriptを使う場合、yarn add --dev @types/supertest
も
index.js
const express = require('express');
const app = express();
app.use(express.json());
app.get('/api/hello', (req, res) => {
res.status(200).json({ message: 'Hello, world!' });
});
module.exports = app;
index.test.js
const request = require('supertest');
const app = require('./app'); // Expressアプリケーションのインポート
describe('GET /api/hello', () => {
it('should return a greeting message', async () => {
const res = await request(app).get('/api/hello');
expect(res.statusCode).toEqual(200);
expect(res.body).toHaveProperty('message', 'Hello, world!');
});
});
テスト後にDBをクリーンアップする
src/data/index.ts
import { exit } from 'node:process'
import { db } from '../config/db' //DB接続設定している
const clearData = async () => {
try {
//MEMO: DB内のすべてのテーブルを再作成する
await db.sync({ force: true })
log('DBをクリアしました')
//MEMO: 正常終了
exit(0)
} catch (error) {
console.log(error, 'DBのクリアに失敗しました');
//MEMO: 終了
exit(1)
}
}
if (process.argv[2] === '--clear') {
clearData();
}
pachage.json
のscriptsに以下を追加
"pretest": "ts-node ./src/data --clear"
Discussion