スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

CakePHP2でFixtureをディレクトリ分けする方法

CakePHP2では、Fixtureをテストケース毎に別にするのにファイルをいくつも作る必要があるらしい。
app/Test/Fixture の中がごちゃごちゃになってしまうので、フォルダ分けが出来るみたいなので、その方法をメモ。
1.app/Libに下記ファイルを新規作成。
AppFixtureManager.php

class AppFixtureManager extends CakeFixtureManager {

protected function _loadFixtures($fixtures) {
foreach ($fixtures as $fixture) {
$fixtureFile = null;
$fixtureIndex = $fixture;
if (isset($this->_loaded[$fixture])) {
continue;
}

if (strpos($fixture, 'core.') === 0) {
$fixture = substr($fixture, strlen('core.'));
$fixturePaths[] = CAKE . 'Test' . DS . 'Fixture';
} elseif (strpos($fixture, 'app.') === 0) {
// MODIFIED
// app.unittest.plan が来たら /fixtures/unittest/plan_fixtures.php
// をロードするようにする
$parts = explode('.', $fixture);
$fixture = $parts[count($parts) - 1];

array_shift($parts);
array_pop($parts);
$path = implode(DS, $parts);

$fixturePaths = array(
TESTS . 'Fixture' . DS . $path,
TESTS . 'Fixture'
);
} elseif (strpos($fixture, 'plugin.') === 0) {
$parts = explode('.', $fixture, 3);
$pluginName = $parts[1];
$fixture = $parts[2];
$fixturePaths = array(
CakePlugin::path(Inflector::camelize($pluginName)) . 'Test' . DS . 'Fixture',
TESTS . 'Fixture'
);
} else {
$fixturePaths = array(
TESTS . 'Fixture',
CAKE . 'Test' . DS . 'Fixture'
);
}

$loaded = false;
foreach ($fixturePaths as $path) {
$className = Inflector::camelize($fixture);
if (is_readable($path . DS . $className . 'Fixture.php')) {
$fixtureFile = $path . DS . $className . 'Fixture.php';
require_once $fixtureFile;
$fixtureClass = $className . 'Fixture';
$this->_loaded[$fixtureIndex] = new $fixtureClass();
$this->_fixtureMap[$fixtureClass] = $this->_loaded[$fixtureIndex];
$loaded = true;
break;
}
}

if (!$loaded) {
$firstPath = str_replace(array(APP, CAKE_CORE_INCLUDE_PATH, ROOT), '', $fixturePaths[0] . DS . $className . 'Fixture.php');
throw new UnexpectedValueException(__d('cake_dev', 'Referenced fixture class %s (%s) not found', $className, $firstPath));
}
}
}
}

2.app/Test/Fixture の配下にディレクトリ作成。(仮にMytestとする)
3.いつものFixtureのファイルを作成(仮にTest001Fixture.php)
4.例えばモデルのテストで使う方法。
class MytestTest extends CakeTestCase {

/**
* Fixtures
*
* @var array
*/
public $fixtures = array(
'app.Mytest.Test002'
);
public $autoFixtures = false;

public function testLoadDirectoryFixture() {
$this->loadFixtures('Test002');
}
}
これで、testLoadDirectoryFixture内のテストで読み込めるようになる。

参考サイト
テスト - CakePHP Cookbook 2.x ドキュメント
【CakePHP2】Fixtureをディレクトリ分け
スポンサーサイト

トラックバック

コメント

コメントを残す

Secret


プロフィール

U2K

Author:U2K
いろいろプログラムに関しての覚え書きをちょくちょくと書いていきます。

オススメ










オススメ

忍者AdMax

u2k on Twitter

最近の記事


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。