Test::mysql で起動したインスタンスに mysql クライアントで接続するとテストがさらに快適に

昨日書いたエントリ、Test::mysqld を別ウィンドウで立ち上げたら開発時の prove が快適過ぎる件ですが、prove とか make test がコケたりしたときに、実際に DB の中身がどうなってるか見れた方がデバッグが捗りますよね。

加えて、どうせなら使い慣れた mysql クライアントでテストの結果、テーブルがどうなっているか見たいですね。

ということで、テスト用に立ち上げた mysqld に手軽に接続できるスクリプトを書いてみました。

#!/usr/bin/env perl
use strict;
use warnings;
use File::Spec;
use JSON;

my $tempfile = File::Spec->catfile(File::Spec->tmpdir, 'test_mysqld.json');

open my $fh, '<', $tempfile or die $!;
my $json = decode_json(join '', <$fh>);
close $fh;

my @command = qw(mysql --user root --socket);
push @command, $json->{'my_cnf'}{'socket'}, 'test';

exec @command;

こんな感じのスクリプトを、t/script/test_mysql.pl とか適当な名前で保存してパーミッション与えて下さい。

t/script/mysqld_runner.pl が立ち上げた mysqld はプロセス再起動するだけで、まっさらな状態に戻せるので、デバッグ用途だけでなく、サンドボックス的に色々実験する用途にも向いているので、色々と遊べて良いと思います。

これで、Test::Fixture::DBI によるテストがより快適になりました。