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 によるテストがより快適になりました。