ukoasis blog

Laravel4でArtisan commandをUnitTestする

March 26, 2014

Laravelでコマンド書いている時に、どうやってテストから実行させるのかでハマったのでメモ

結論

Symfony\Component\Console\Tester\CommandTesterを使う

サンプル

キャッシュを消すコマンドのテストで使ったものの抜粋 executeの引数はコマンドに渡したいパラメータをarrayで渡す

<?php

use Symfony\Component\Console\Tester\CommandTester;

class DeleteCacheCommandTest extends TestCase {

  public function testOutput()
  {
    $tester = new CommandTester(new DeleteCacheCommand);

    $tester->execute([]);

    $this->assertThat(trim($tester->getDisplay()), $this->equalTo("cache of demo mode was deleted")); 
  }

} 

参考にさせていただいたサイト&本

https://laracasts.com/forum/956-creating-a-phar-like-laravel-envoy-and-testing-it/0

laravel-testing-decoded

Laravel Testing Decodedは日本語もあるので、日本語が良い方はそちらをどうぞ。 Laravel Testing Decodedは読むたびに、あーこれが知りたかったんだわというのがあって、非常にオススメです。