$ composer testでPHPUnitを実行する

{
    "scripts": {
        "test": "phpunit"
    }
}

https://getcomposer.org/doc/articles/scripts.md#writing-custom-commands

composer.jsonにこんな感じで書くと、カスタムコマンドとして$ composer testでPHPUnitを実行出来ます。

PHPUnitはComposerで入れる場合がほとんどなんだけど、Composerで入れたコマンドはPATHが通ってないから$ ./vendor/bin/phpunitとちょっと長くなって不便。
direnvでvendor/binにPATH通したりしてたけど、ちょっとめんどくさいしnpm testみたいな事、Composerでも出来ないかなと思って調べたら、ありました。

簡単だし迷わなくていいし、フレームワークでも独自のものを持たないでComposerでるようになっていって欲しいなぁ。

引数の渡し方

$ composer test -- --tap
TAP version 13
ok 1 - kanonji\tests\ReproducibleShuffleTest::test_shuffle_with_seed_1
ok 2 - kanonji\tests\ReproducibleShuffleTest::test_shuffle_with_seed_2
ok 3 - kanonji\tests\ReproducibleShuffleTest::test_shuffle_with_seed_3
ok 4 - kanonji\tests\ReproducibleShuffleTest::test_equal_shuffled_array_with_same_seed
1..4

$ composer test -- --version
Composer version 1.0-dev (89540c5690c439a3c9d35f689d3d6cca8d05642c) 2015-06-12 16:23:18

カスタムコマンドで実行してるPHPUnitの方に引数やオプションなど渡す場合は--で区切る必要があるらしく、やってみたら確かに必要で、--tapとかは効いてるのを確認出来ました。
でも、--versionみたいなcomposerコマンドにもあるオプションだと、うまくいきませんでした。何となくバグっぽい気もする。

渡せるとはいえ引数やオプションはちょっと面倒なので、phpunit.xmlを作っておいて、引数など無しでテストが実行されるようにしておいた方が良いぽい。

カスタムコマンドでのPATH

Note: Composer's bin-dir is pushed on top of the PATH so that binaries of dependencies are easily accessible as CLI commands when writing scripts.
https://getcomposer.org/doc/articles/scripts.md#writing-custom-commands

カスタムコマンドではvendor/binにPATHを通してあるので"test": "vendor/bin/phpunit"とかじゃなく"test": "phpunit"で設定出来ます。

composer.jsonの例

{
    "name": "foo",
    "authors": [
        {
            "name": "name",
            "email": "foo@example.com"
        }
    ],
    "require-dev": {
        "phpunit/phpunit": "4.7.*"
    },
    "scripts": {
        "test": "phpunit"
    }
}

PHPUnitを入れておかないとなので、最低限の設定はこんな感じです。

環境

環境 バージョン
PHP 5.5.7
Composer 1.0-dev (89540c5690c439a3c9d35f689d3d6cca8d05642c) 2015-06-12 16:23:18
PHPUnit 4.6.4

書いた日

2015年6月14日頃

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>