FileFixture Plugin for CakePHPを作りました

皆さんテスト書いてますか?

という事で、必要に迫られて「FileFixture Plugin for CakePHP」を作りました。

Fixtureのデータを外部ファイルから読込む

プロジェクトの規模が大きくなってくると、整合性の取れたテストデータを手動でFixture形式にするのは結構大変です。Excel等の表計算ソフトでテストデータをまとめて作成して、CSVで出力したファイルをFixtureから利用する事が出来ます。

FileFixture Plugin for CakePHP」で出来る事は以下の通りです。

  • CSVファイルからFixtureデータを読み込む
  • TSVファイルからFixtureデータを読み込む

今のところ、対応しているフォーマットはCSV/TSVの2つですが、一応複数のフォーマットに対応出来る様に作ったつもりなのでそのうちXMLとかYamlとかも作るかもしれません。

他にも幾つかアイデアがあるので、しばらくはメンテナンスしていく予定。

使い方

使い方はとても簡単です。

データファイルを準備

下記のディレクトリにCSVファイルを用意します。

app/Test/Fixture/Data/posts.csv

1行目のフィールド名は、実際のテーブルのフィールド名と一致している必要があります。

title,body,created,modified
"The title","This is the post body.","2011-06-20 23:10:57","2011-06-20 23:10:57"
"A title once again","And the post body follows.","2011-06-20 23:10:57","2011-06-20 23:10:57"
"Title strikes back","This is really exciting! Not.","2011-06-20 23:10:57","2011-06-20 23:10:57"

テストデータファイルをFixtureで指定

Fixtureを以下の様に、親クラスを変更し、テストデータファイルを指定するだけです。

<?php
App::uses('FileTestFixture', 'FileFixture.TestSuite/Fixture');
class PostFixture extends FileTestFixture {
	public $fields = array(
		'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'length' => 11, 'key' => 'primary'),
		'title' => array('type' => 'string', 'null' => true, 'length' => 50),
		'body' => array('type' => 'text', 'null' => true, 'length' => 1073741824),
		'created' => array('type' => 'datetime', 'null' => true),
		'modified' => array('type' => 'datetime', 'null' => true),
		'indexes' => array(
			'PRIMARY' => array('unique' => true, 'column' => 'id')
		),
		'tableParameters' => array()
	);

	public $importRecords = array(
		// 'path' => [path to Fixture File Path], // Optional(default is 'app/Test/Fixture/Data/')
		'file' => 'posts.csv',
	);
}

デフォルトでは、'app/Test/Fixture/Data/' にあるファイルを利用しますが、パラメータを指定する事で別のディレクトリに配置する事も可能です。

多分、来月くらいから実戦配備する事になると思うので必要な機能が出来たら随時アップデートする予定です。