laravelのテストケースを作成するコマンドを作った
個人的にですが、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
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
が含まれてなかったりするんですけどどうやるんですかね。。。 誰か教えてください。