Skip to content

Instantly share code, notes, and snippets.

@yukikim
Created November 19, 2024 05:02
Show Gist options
  • Save yukikim/ac50f18665f417262c14b1712f1673ed to your computer and use it in GitHub Desktop.
Save yukikim/ac50f18665f417262c14b1712f1673ed to your computer and use it in GitHub Desktop.
jestでexpressのテスト

はい、Jestを使ってExpress.jsのテストを行うことは可能です。Jestは、JavaScriptのユニットテスト、インテグレーションテストのフレームワークとして広く使われており、Expressアプリケーションのテストにも適しています。

Express.jsアプリケーションのテスト手順

以下は、Express.jsアプリケーションのテストをJestで行うための基本的な方法です。

1. Expressアプリケーションの作成

まず、簡単なExpress.jsアプリケーションを作成します。

// app.js
const express = require('express');
const app = express();

// ミドルウェア
app.use(express.json());

// ルート
app.get('/hello', (req, res) => {
  res.status(200).json({ message: 'Hello, World!' });
});

module.exports = app;

2. テストコードの作成

Jestを使ってExpress.jsアプリケーションのエンドポイントをテストするために、supertestというライブラリを使います。supertestは、HTTPリクエストをシミュレートするのに便利なツールです。

まず、必要なパッケージをインストールします。

npm install --save-dev jest supertest

次に、テストコードを作成します。

// app.test.js
const request = require('supertest');
const app = require('./app');  // Expressアプリケーションをインポート

describe('GET /hello', () => {
  it('should respond with a message', async () => {
    const response = await request(app).get('/hello');
    expect(response.status).toBe(200);  // ステータスコード200を確認
    expect(response.body.message).toBe('Hello, World!');  // レスポンスの内容を確認
  });
});

3. Jestの設定

package.jsonにJestの設定を追加します。通常はJestは自動的に設定されますが、カスタム設定が必要な場合は以下のようにします。

{
  "scripts": {
    "test": "jest"
  }
}

4. テストの実行

次に、テストを実行します。

npm test

これで、Expressアプリケーションが正しく動作しているかをJestを使って確認できます。

追加のアドバイス

  • 非同期テスト: supertestを使うと、非同期のテストが簡単にできます。async/awaitを使用することで、HTTPリクエストが完了するのを待ってからテストを進めることができます。
  • モックデータの使用: データベースを使用している場合など、外部リソースに依存しないようにするためにモックを使うことができます。たとえば、jest.mock()を使ってモックデータを提供することができます。

まとめ

  1. Expressアプリケーションを作成。
  2. supertestを使ってHTTPリクエストをシミュレート。
  3. Jestでテストコードを記述。
  4. テストを実行。

これで、Jestを使ってExpressアプリケーションのテストが可能になります。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment