おそらくはそれさえも平凡な日々

scan-prereqs-cpanfile now support --scan-test-requires option which cares the modules specified by Test::Requires

TL;DR

以下のコマンドを打てば、Test::Requiresに指定したモジュールをdevelop requiresに含めてくれます。便利。

% scan-prereqs-cpanfile --scan-test-requires

本題

Test::Requiresという大変便利なモジュールがあります。モジュールがインストールされているか否かをチェックして、モジュールがない場合はテストをスキップしてくれると言うものです。

これはモジュールをインストールする側からすると大変ありがたい機能で、例えば、DB関連のモジュールであればPostgreSQLを使っている人は、DBD::Pgに関するテストは回して欲しいけど、DBD::mysqlに関しては適切にテストをスキップして欲しいとかそういうのがあるわけです。

ただ、モジュールを作る側や、パッチを送る側からすると時々困ることがあります。テストが通ってたつもりだったけど、実はskipされてただけだったんやー、実は盛大にこけてたわーみたいなことがあるわけです。

それを解決するために、Test::Requires::Scannerという、Test::Requiresに指定されているモジュールを抜き出すモジュールを書いたのですが、この機能を、App::scan_prereqs_cpanfileに取り込んでもらいました。

App::scan_prereqs_cpanfileはこれまた非常に便利なモジュールであり、インストールするとscan-prereqs-cpanfileというコマンドがインストールされるのですが、これを実行するとプロジェクトで利用されているモジュールをスキャンして、cpanfile形式で出力してくれるのです。

この、scan-prereqs-cpanfile--scan-test-requiresオプションを加えてもらいました。

% scan-prereqs-cpanfile --scan-test-requires

上記のコマンドを打てば、Test::Requiresに指定したモジュールをdevelop requiresに含めてくれます。便利。

ちなみに、

% cpanm --with-recommends App::scan_prereqs_cpanfile

か、

% cpanm Test::Requires::Scanner

とかしないと入らないと思います。あとは、モジュールのメンテナンスするときや、パッチを送る時なんかに

% cpanm --installdeps --with-develop .

とかやれば適切にモジュールがインストールされ、

% prove -lr t/ xt/

とかテストを回せばskipされることなくテストが回ってくれるので安心ですね。

この辺もろもろCONTRIBUTING.mdとかに書いておいたほうがいいのかもですね。

created at
last modified at

2014-07-17T00:57:32+0900

comments powered by Disqus