mysqljsとテストについて

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

まずはインストール

1
npm install mysql

使い方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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をモックしてテストを行なう形にしました。

インストール

1
npm install mockery

setup.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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はいろんな場面で役にたちそうだなと感じました(゜゜)

このエントリーをはてなブックマークに追加