PHPSpec の実行方法

PHPSpec でスペックやサンプルを実行する方法には、二通りのモードがあります。 このマニュアルで主に使用する方法は、bash や MS-DOS などのコマンドプロンプトから phpspec コマンドを実行するものです。 もうひとつの方法としては、.php ファイルの URL を指定してお好みのウェブブラウザで開くというものもあります。 この方式では、プレーンテキストあるいは HTML のいずれかで結果を出力することができます。 また、さまざまなオプションも指定することができます。

コンソールからの実行

PHPSpec のデフォルトの実行方法はをコンソールから実行する方式であり、 これは何も追加の作業なしに行うことができます。 スペックを書いたら、単にコマンドラインからその場所に移動して 次のコマンドを実行するだけです。

$ phpspec --recursive

この単純なコマンドは、 カレントディレクトリ以下を再帰的にスキャンします。 そして、見つかったすべてのスペックファイルについて、 すべてのサンプルを実行します。 このように単純に使えるため、 コンソールから使用するのは最もよい選択といえるでしょう。 Unix のコンソールを使用している場合は、 なんと結果がカラーで表示されます!

phpspec コマンドにはさまざまなオプションがあります。 バージョンが上がるにつれて、さらにオプションが追加される予定です。 各オプションには、通常は長いバージョンと (1 文字の) 短いバージョンがあります。 現在使用可能なオプションの一覧を、次の表にまとめます。

PHPSpec コマンドのオプション

長い形式 短い形式 説明
     
–backtrace -b 完全なバックトレースを有効にする
     
–colour, –color -c 出力に色をつける
     
–example STRING -e 名前に STRING を含むサンプルを実行する
     
–formatter -f 利用可能なフォーマッターのいずれかを指定し、出力書式を 標準の進捗形式 (デフォルトのドット表記) か Specdox、あるいは HTML にする
     
–help -h オプションを表示する
     
–fail-fast None 最初に失敗した時点で実行を中止する
     
–recursive -r カレントディレクトリ以下を再帰的にスキャンして、 見つかったすべてのスペックファイルについて、 すべてのサンプルを実行する
     
–version None バージョンを表示する

HTTP 経由の実行

HTTP ランナーは、その場ですぐ実行できるというものではありません。 ウェブブラウザ経由で呼び出したい PHP ファイルについて、 ちょっとした仕込みを行う必要があります。 とはいえそれは本当にシンプルな作業なので、 HTTP 経由での実行もコマンドラインからの実行と同列に扱って説明することにしました。

HTTP 経由で実行するためのファイル AllSPecs.php の例を以下に示します。

<?php

require_once 'PHPSpec/Loader/UniversalClassLoader.php';
$loader = new \PHPSpec\Loader\UniversalClassLoader();
$loader->registerNamespace('PHPSpec', '/usr/share/pear');
$loader->register();

$options = array('specsDir', '--formatter', 'html');
$specs = new \PHPSpec\PHPSpec($options);
$specs->execute();

\PHPSpec\Runner\Cli\Runner クラスは、 実際には \PHPSpec\PHPSpec が内部的に使用しているものです。 つまりここで行っているのは非常に単純なことです。 この例で実際にやっていることは、 Cli ランナーが内部で行っている作業を PHP ファイルに書き出しているだけで、 ウェブブラウザから呼び出されたときにもこれを実行できるようにしています。 まず、ベースとなるファイル PHPSpec/Loader/UniversalClassLoader.php をインクルードします。 PHPSpec は Symfony のユニバーサルオートローダーを使っているので、 PHPSpec のその他のファイルをインクルードする必要はありません。 次に、必要なオプションを配列の値として設定します。 ここで指定しているオプションは、すべてのスペックを実行するためのごく一般的なものです。 PHPSpec は指定したディレクトリ以下を再帰的に検索し、 みつかったスペックのすべてのサンプルを実行します。 出力結果には specdoc 形式のプレーンテキストが追加され、 HTML レポーターを使って HTML を出力します。 最後に、 PHPSpec\PHPSpec execute() メソッドを実行します。これで完了! 特定のサブディレクトリのスペックだけを実行したいのなら、 そのディレクトリを配列 $options の最初の要素として渡します (再帰検索のオプションは、親ディレクトリは対象外となります)。