「AWS無料相談会」をオンラインで開催中

mysqljsとテストについて

最近Lambda+nodeを頑張っている、長です。最近mysqljsと言うものを使用したので、使い方とテストについて紹介したいと思います。

まずはインストール

npm install mysql

使い方

import mysql from 'mysql';

const connection = mysql.createConnection({
   host: 'localhost',
   user: 'user',
   password: 'password',
   database: 'database'
});

connection.connect((error) => {
  if (error) {
    console.error('error connecting: ' + error.stack);
    return;
  }
  console.log('connected as id ' + connection.threadId);
});

connection.query(SELECT * FROM table, (error, results, fields) => {
  if (error) {
    console.log(error);
    return;
  } else {
    console.log('results[0]);
  }
});

mysql.createConnectionの値は必要に応じて変更してください。

そして、テストですがテストで実際のDBに対してクエリ実行してしまうのはよろしくないので、今回「mockery」を使用し、mysqljsをモックしてテストを行なう形にしました。

インストール

npm install mockery

setup.js

import mockery from 'mockery';
import m from 'module';

const connectionMock = {
  connect: () => {
  },
  query: (query) => {
    let result;
    switch (query) {
      case 'SELECT * FROM  table;':
        result = 'result'
        break;
      default:
    }
    return result;
  }
}

const mysqlMock = {
   createConnection: () => {
     return connectionMock;
   }
};

mockery.enable();

mockery.warnOnUnregistered(false);

mockery.registerMock('mysql', mysqlMock);

const originalLoader = m._load;
m._load = (request, parent, isMain) => {
  return originalLoader(request, parent, isMain);
}

上記のjsをpackage.jsonに追記し、テストの際に実行されるようにすればOKです。

こういった実装は初めてだったのですが、mockeryはいろんな場面で役にたちそうだなと感じました(゜゜)