App::Prove::Plugin::HarrietでTest::mysqldを起動する
2015年8月9日
perlのtestと言えば、proveなんですけど、-Pのオプションでプラグインを追加できて、その中でも、
App::Prove::Plugin::Harrietが結構便利です。
素の状態で実行するならこんな感じ。
carton exec -- prove -PHarriet=t/harriet/
実際は、.provercに
-PHarriet=t/harriet/
を追加しておくと、毎回オプションをつける必要が無いんですが、これで、t/harriet/*.plをprove実行時(.tの実行前)に実行してくれるようになります。
で、何を入れておくかというと
use Test::mysqld; $ENV{'MYSQL_DSN'} ||= do{ $mysqld = Test::mysqld->new( my_cnf => { 'skip-networking' => '', }, ) or die $Test::mysqld::errstr; $mysqld->dsn; }; END { undef $mysqld; }
上記のmysqld.plを、t/harrietの下に入れておけば、prove実行時に、test用のmysqlが起動して、接続先が環境変数(MYSQL_DSN)に入ります。
これで、それぞれの*.tで、毎回mysqldを起動しなくても、環境変数に入ってるとこに接続すれば、1つのmysqldで全部のテストが可能になりますね!
ただ、各テストが影響しないようにする必要はありますが。
例えば、データを追加するテストをした後じゃないと、データを取得するテストがPASSしないとかとか。
これは、それぞれ必要なデータを入れてからテストをするか、初期化をするような処理を入れればいいですかね。
並列で実行した時にエラーになる場合はどうすればいいかな・・。