【Express】単体テストを作成する

Jestが提供するモック関数を利用することで、
Expressのハンドラ関数の単体テストを作成します。

ここでは、下記の内容を前提としています。

方針

以下のようなディレクトリ構成に変更します。

変更前変更後
app.tsapp.ts
なしserver.ts
なしping/controller/pingController.ts
なしping/service/pingService.ts

手順

app.tsを以下のように編集する。

import express from 'express';
import * as pingController from './ping/controller/pingController';

export const app = express();

app.get('/ping', pingController.ping);

server.tsを作成し、以下のように編集する。

import { app } from './app';

const port = 3000;

app.listen(port, () => {
    console.log(`Server listening on port ${port}`);
});

ping/controller/pingController.tsを作成し、以下のように編集する。

import express from 'express';
import * as pingService from '../service/pingService';

export const ping = (req: express.Request, res: express.Response) => {
    res.send(pingService.ping());
};

ping/service/pingService.tsを作成し、以下のように編集する。

export const ping = (): string => {
    return 'pong';
};

ping/test/controller/pingController.test.tsを作成し、以下のように編集する。

import express from 'express';
import * as pingController from '../../controller/pingController';

describe('/ping', () => {
    test('pongという文字列を返す', () => {
        const mockReq: Partial<express.Request> = {};
        const mockRes: Partial<express.Response> = {
            send: jest.fn()
        };

        pingController.ping(
            mockReq as express.Request,
            mockRes as express.Response
        );

        expect(mockRes.send).toBeCalledWith('pong');
    });
});

参考

タイトルとURLをコピーしました