laravelのテストケースを作成するコマンドを作った

2015年8月31日月曜日
  • このエントリーをはてなブックマークに追加

個人的にですが、laravelのmakeコマンドにはなぜユニットテストが無いのか?と思っていました。 (CakePHPであればbakeした時にTestCaseのファイルも一緒に生成してくれるのに…)

パッケージがあるんじゃないかと探してみましたが見つかりませんでした。

ないなら作るしかないかと思って作ってみました。

ootatter/laravel-make-testcase

3つの生成方法があり、

方法1
php artisan make:testcase

app_path()配下のPHPファイルを走査してclass定義されているPHPファイルを選択するような方法になります。

方法2
php artisan make:testcase Http\\Controllers\\PostController

引数にNamespaceとクラス名で指定できるようにしてみました。 なんとなく他のmake:controllerなどに合わせるような形で。

方法3
php artisan make:testcase --all

方法1で検出したファイルを全部生成します。 ただし、既に生成されている場合は確認を求めるようにしてます。

生成される内容

出力先はtests以下に同じ階層で、Testのsuffixがついた形で出力します。 ただし、クラス名が重複しないようにフォルダの階層をprefixとして付与するようにしました。 生成されるTestCase内でnamespaceを使うべきか悩みましたがlaravelのコアのテストケースもフォルダ構成は同等でnamespaceは使っていなかったので合わせました。

生成対象のメソッドは自クラスのpublicメソッドで、且つtraitを使ったメソッドは除外して生成するようにしました。

生成されるコードは下記のような感じで出力されます。

https://github.com/ootatter/laravel-make-testcase/blob/master/tests/fixture/SomeControllerTest.php

<?php
use DummyApp\Http\Controllers\SomeController;

/**
 *
 */
class HttpControllersSomeControllerTest extends TestCase
{
    /**
     * Setup the test environment.
     *
     * @return void
     */
    public function setUp()
    {
        parent::setUp();
    }

    /**
     * Clean up the testing environment before the next test.
     *
     * @return void
     */
    public function tearDown()
    {
        parent::tearDown();
    }

    /**
     * @test
     * @covers DummyApp\Http\Controllers\SomeController::publicSomeMethod
     * @todo   Implement publicSomeMethod().
     */
    public function publicSomeMethod()
    {
        // Remove the following lines when you implement this test.
        $this->markTestIncomplete(
            'This test has not been implemented yet.'
        );
    }
    /**
     * @test
     * @covers DummyApp\Http\Controllers\SomeController::publicStaticMethod
     * @todo   Implement publicStaticMethod().
     */
    public function publicStaticMethod()
    {
        // Remove the following lines when you implement this test.
        $this->markTestIncomplete(
            'This test has not been implemented yet.'
        );
    }
}

packagistの登録

今回初めてComposerのpackagistに登録してみました。
最初は、composer require ootatter/laravel-make-testcaseをしても下記のメッセージがでて?_?状態でした。"minimum-stability": "stable"を入れても状況は変わりませんでした。

[InvalidArgumentException]
  Could not find package ootatter/laravel-make-testcase at any version for your minimum-stability (stable). Check the package spelling or your minimum-stability

とりあえず、ちゃんとtagをつけたところ上記コマンドでインストールできるようになったんですが。。。

よくcomposer経由でインストールするとtestsが含まれてなかったりするんですけどどうやるんですかね。。。 誰か教えてください。

ラベル:


0 件のコメント:

コメントを投稿