あけましておめでとうございます。本年もよろしくお願いします(遅い)。

今年最初の記事は、PHPのマイクロフレームワーク Slim についてです。

Slimは簡単なウェブアプリケーションを作るのに便利なのですが、テスト機能はありません。

内輪だけで使って、すぐ捨てる前提のサイトならこれでもいいかもしれませんが、ある程度継続して使うなら、テストはあったほうがいいと思います。

公式に用意されている codeguy/Slim-Skeleton をベースに、PHPUnit + Goutte でテストできるようにしたスケルトンを作りました。ソースコードは以下にあります。

ryu22e/Slim-Skeleton-PHPUnit

Packagist にも登録したので、このコマンドでプロジェクトを作れます:

    php composer.phar create-project ryu22e/slim-skeleton-phpunit [my-app-name]

テスト実行は以下のコマンドでできます:

    make test

テストコードはこんな感じで書けます:

    <?php
    use Goutte\Client;

    class WebTest extends \PHPUnit_Framework_TestCase
    {
        public function setUp()
        {
            $this->url = sprintf('http://%s:%s/', WEB_SERVER_HOST, WEB_SERVER_PORT);
        }

        public function testShowPage()
        {
            $client = new Client();
            $crawler = $client->request('GET', $this->url);
            $this->assertEquals(200, $client->getResponse()->getStatus());
        }
    }

追加・変更したのは以下のファイル・ディレクトリです。

  • composer.json →PHPUnit, Goutte を追加。
  • phpunit.xml → PHPUnitに渡す設定ファイル。
  • tests/ →テストコードやbootstrap.php1 を置くディレクトリ。
  • Makefile → make test で実行できるようにするためのファイル2

テスト実行時にPHPの ビルトインウェブサーバー を呼んでいるのですが、以下の記事が参考になりました。

Using PHP’s built-in web server in your test suites – VG Tech

この作りは特定のフレームワークに依存しないので、フレームワークを使っていない & テストコードがないプロジェクトにテストを追加するときに応用できると思います。ぜひ、お試しください!


  1. PHPUnitでテストを開始する時に最初に実行されるファイル。 ↩︎

  2. コマンド入力を簡単にするために作っただけなので、phpunitコマンドを直接使っても問題ありません。 ↩︎