WebAPI サーバと通信テストをするための Node.js スクリプトを作ってみる

Express で WebAPI サーバを作って、実際にデータをやり取りできるかテストするために、Node.js スクリプトを作ってみた。

今回の Node.js スクリプトで使用するのは、Node.js 組み込みの http モジュールのみ。依存パッケージがないのでシンプルかと。

目次

ベーススクリプト

まずは HTTP 通信の共通処理をまとめた base.js を作成する。

/* tests/base.js */

const http = require('http');

/**
 * HTTP 通信テスト関数
 * 
 * @param postDataObj 送信するデータオブジェクト
 * @param requestOptions オプション : path と method を指定する
 */
module.exports = (postDataObj, requestOptions) => {
  // オブジェクトから文字列化する
  const postData = JSON.stringify(postDataObj);
  // オプション情報をマージする
  const options = Object.assign({
    // サーバのホストをココで指定しておく : この場合は localhost:8080
    host: 'localhost',
    port: 8080,
    headers: {
      'Content-Type': 'application/json',
      'Content-Length': Buffer.byteLength(postData)
    }
  }, requestOptions);
  
  // リクエスト送信開始
  const req = http.request(options, (res) => {
    console.log(`Status  : ${res.statusCode}`);
    console.log(`Headers : ${JSON.stringify(res.headers)}`);
    
    res.setEncoding('utf8');
    res.on('data', (chunk) => {
      // (未整形のままレスポンスデータを出力する)
      console.log(`Body    : ${chunk}`);
      
      // 整形して出力できそうなら出力する
      try {
        console.log(JSON.stringify(JSON.parse(chunk), null, '  '));
      }
      catch(e) { }
    });
  });
  
  // エラー時
  req.on('error', (error) => {
    console.log(`Problem With Request : ${error.message}`);
  });
  
  req.write(postData);
  req.end();
};

次に、テストしたい内容に合わせて、base.js を利用したファイルを作っていく。

GET 通信 (Find) のテスト

/* tests/get.js */

const base = require('./base');

// POST するデータなし
const postData = {};
// http://localhost:8080/api/users に GET 通信する
const options = {
  path: '/api/users',
  method: 'GET'
};
// テスト実行
base(postData, options);

POST 通信 (Create) のテスト

/* tests/post.js */

const base = require('./base');

// 追加したいデータを用意する
const postData = {
  'name': 'テストユーザ',
  'age' : 99
};
// POST 送信する
const options = {
  path: '/api/users',
  method: 'POST'
};
// テスト実行
base(postData, options);

PUT 通信 (Update) のテスト

/* tests/put.js */

const base = require('./base');

// 更新したいフィールドのみデータを用意する
const postData = {
  'name': '改姓テストユーザ'
};
// PUT 送信する
const options = {
  path: '/api/users/25',  // ID を指定する
  method: 'PUT'
};
// テスト実行
base(postData, options);

DELETE 通信 (Destroy) のテスト

/* tests/delete.js */

const base = require('./base');

// POST するデータなし
const postData = {};
// DELETE 通信する
const options = {
  path: '/api/users/39',  // ID を指定する
  method: 'DELETE'
};
// テスト実行
base(postData, options);

実行してみる

これでスクリプトの用意は完了。

あとは $ node ./tests/get.js とか $ node ./tests/update.js とかいう風にスクリプトを実行すると、指定のリクエストデータをサーバに送信し、レスポンス情報がコンソールに出力されるだろう。

Node.js 標準モジュールだけでもこんなことができて、よきよき。