Test::ContinuousでGrowlにtest完了通知させるようにしてみる

Catalyst::Testを使ってみたらtestを1回走らせるのも時間がかかって、いちいち結果出るまで眺めていたくないし、Growlで通知してもらうのがいいよなーと思って、例によってTwitterで聞いてみた。

即答! @lopnorさんありがとうございます!!
http://search.cpan.org/~gugod/Test-Continuous-0.67/lib/Test/Continuous.pm
これのことらしい。全然知らなかった。


早速いれてみようとすると、色々こけた。
何だかよく分からない、B::OPCheck。
YellowStore: [Perl:テスト]B-OPCheck-0.29
どうも0.28以降が失敗するようで、とりあえず0.27を入れてお茶を濁した。

$ cpanm http://search.cpan.org/CPAN/authors/id/N/NU/NUFFIN/B-OPCheck-0.27.tar.gz


あとMac::Growl
なんだかpermissionまわりで怒られたので、sudo cpanでシステムにインストールしてしまった。

$ sudo cpan -i Mac::Growl


とりあえずこれでTest::Continuousが使えるようになった。"autoprove"というコマンドが付属してきてるので、それを使えば良いだけっぽい。ためしにモジュール作成するようにやってみる

$ module-starter --module=Hoge
Created starter directories and files
$ cd Hoge
$ ls t
00.load.t      perlcritic.t   pod-coverage.t pod.t
$ autoprove
[MSG] Will run continuously test /Users/sugyan/temp/Hoge/t/00.load.t
[MSG] Will run continuously test /Users/sugyan/temp/Hoge/t/perlcritic.t
[MSG] Will run continuously test /Users/sugyan/temp/Hoge/t/pod-coverage.t
[MSG] Will run continuously test /Users/sugyan/temp/Hoge/t/pod.t

と、testファイルを見てautoなtestの準備が始まる。この時点で読み込んだtファイルしか監視しないのかな?
例えば01.hoge.tを一度作って、そのままの状態にしておき、別のところで書き換える。

$ touch t/01.hoge.t
$ autoprove
use Test::More tests => 1;
ok 1;


勝手にテストが走り、結果がGrowlで通知される。


01.hoge.tを書き換えて失敗させてみる。

use Test::More tests => 1;
use Hoge;

can_ok( 'Hoge', qw/new/ );


失敗した!


lib/Hoge.pmを書き換えて、テストが通るようにする。

...
# Module implementation here
sub new {
    my $class = shift;
    return bless {}, $class;
}
...


あら、今度はpod-coverage.tが失敗してる! PODを書き足す。

...
=head1 INTERFACE 

=over

=item new

=back

...


通った!


とりあえず結構よさげなので使ってみようと思います。