CakePHP の Debugkit プラグインから拝借する

今までプラグイン作るたびに All Test を毎回チマチマ書いていて面倒だなと思ってたんですが、CakePHP製の Debugkit プラグインのコードを拝借するととても楽ができたのでメモ。

まず Debugkit は設置しておいて下さい。なければコピペでも大丈夫ですが。

DebugkitGroupTestCase::getTestFiles がいろいろとディレクトリを探索してくれたりしていい塩梅でファイルパスの配列を返してくれているのでこれを使わせてもらいます。

まぁ、ソースを見れば説明不要かもしれませんが、自分は一番簡単と思えたのでとりあえずこうしました↓(サブモジュールとかDebugkitの更新に追従するとかなら別のやり方で)

Debugkit を(編集して)継承するやり方

ステップ1. DebugkitGroupTestCase.php を編集

CakeDC.Test/Case/DebugkitGroupTestCase.php を開いてこれを少し編集します。

getTestFiles の中に一箇所だけ ‘DebugKit’ として直に書かれているのをメンバー変数に追いやるだけです。

class DebugkitGroupTestCase extends PHPUnit_Framework_TestSuite {

	// この行を追加
	public static $pluginName = 'DebugKit';

	public static function getTestFiles($directory = null, $excludes = null) {
		// 略
		if ($directory === null || $directory !== realpath($directory)) {
			// ここにプラグイン名が直接書いてあるので self::$pluginName に変更
			// $basePath = App::pluginPath('DebugKit') . 'Test' . DS . 'Case' . DS; // 変更前
			$basePath = App::pluginPath(self::$pluginName) . 'Test' . DS . 'Case' . DS; // 変更後

ステップ2. 必要な AllTestCase を DebugkitGroupTestCase を継承して作成する

そして自分の All Test Case を以下の要領で作成する。

// MyPlugin/Test/Case/AllMyPluginTest.php

<?php
App::uses('DebugkitGroupTestCase', 'DebugKit.Test/Case');

class AllMyPluginTest extends DebugkitGroupTestCase {

    public static function suite()
    {
        $suite = new self;
        self::$pluginName = 'MyPlugin';
        $files = $suite->getTestFiles();
        $suite->addTestFiles($files);

        return $suite;
    }
}

またはコピペで

オリジナルのプラグインに手を入れたくない場合は該当のメソッド DebugkitGroupTestCase::getTestFiles() をコピペするとかの方向で。

こんな機能もあるよ

$files = $suite->getTestFiles();

のところを、

$files = $suite->getTestFiles('View'); // 'View' だけ

とか

$files = $suite->getTestFiles(null, 'View'); // 'View' を除外

みたいな具合で対象グループを指定できるのも便利かも