トレイト yii\test\FixtureTrait
実装クラス | yii\console\controllers\FixtureController |
---|---|
利用可能バージョン | 2.0 |
ソースコード | https://github.com/yiisoft/yii2/blob/master/framework/test/FixtureTrait.php |
FixtureTrait は、テストケースのフィクスチャの読み込み、アンロード、アクセスのための機能を提供します。
FixtureTrait を使用することで、テストクラスは fixtures() メソッドをオーバーライドすることにより、読み込むフィクスチャを指定できます。loadFixtures() と unloadFixtures() を使用して、フィクスチャの読み込みとアンロードを行うことができます。フィクスチャが読み込まれると、PHP の `__get()` magic メソッドのおかげで、オブジェクトのプロパティのようにアクセスできます。また、フィクスチャが yii\test\ActiveFixture のインスタンスである場合、`$this->fixtureName('model name')` という構文で AR モデルにアクセスできます。
FixtureTrait の詳細と使用方法については、フィクスチャに関するガイド記事 を参照してください。
公開メソッド
メソッド | 説明 | 定義元 |
---|---|---|
fixtures() | 現在のテストケースに必要なフィクスチャを宣言します。 | yii\test\FixtureTrait |
getFixture() | 指定された名前のフィクスチャを返します。 | yii\test\FixtureTrait |
getFixtures() | globalFixtures() と fixtures() で指定されたフィクスチャオブジェクトを返します。 | yii\test\FixtureTrait |
globalFixtures() | 複数のテストケースで共有して使用するフィクスチャを宣言します。 | yii\test\FixtureTrait |
initFixtures() | フィクスチャを初期化します。 | yii\test\FixtureTrait |
loadFixtures() | 指定されたフィクスチャを読み込みます。 | yii\test\FixtureTrait |
unloadFixtures() | 指定されたフィクスチャをアンロードします。 | yii\test\FixtureTrait |
メソッドの詳細
指定されたフィクスチャインスタンスを作成します。
依存する全てのフィクスチャも作成されます。重複するフィクスチャと循環依存関係は、一度だけ作成されます。
protected yii\test\Fixture[] createFixtures ( array $fixtures ) | ||
$fixtures | array |
作成するフィクスチャ。フィクスチャ名またはフィクスチャ設定を提供できます。このパラメータが提供されない場合、globalFixtures() と fixtures() で指定されたフィクスチャが作成されます。 |
戻り値 | yii\test\Fixture[] |
作成されたフィクスチャインスタンス |
---|---|---|
例外 | yii\base\InvalidConfigException |
フィクスチャが正しく設定されていない場合 |
protected function createFixtures(array $fixtures)
{
// normalize fixture configurations
$config = []; // configuration provided in test case
$aliases = []; // class name => alias or class name
foreach ($fixtures as $name => $fixture) {
if (!is_array($fixture)) {
$class = ltrim($fixture, '\\');
$fixtures[$name] = ['class' => $class];
$aliases[$class] = is_int($name) ? $class : $name;
} elseif (isset($fixture['class'])) {
$class = ltrim($fixture['class'], '\\');
$config[$class] = $fixture;
$aliases[$class] = $name;
} else {
throw new InvalidConfigException("You must specify 'class' for the fixture '$name'.");
}
}
// create fixture instances
$instances = [];
$stack = array_reverse($fixtures);
while (($fixture = array_pop($stack)) !== null) {
if ($fixture instanceof Fixture) {
$class = get_class($fixture);
$name = isset($aliases[$class]) ? $aliases[$class] : $class;
unset($instances[$name]); // unset so that the fixture is added to the last in the next line
$instances[$name] = $fixture;
} else {
$class = ltrim($fixture['class'], '\\');
$name = isset($aliases[$class]) ? $aliases[$class] : $class;
if (!isset($instances[$name])) {
$instances[$name] = false;
$stack[] = $fixture = Yii::createObject($fixture);
foreach ($fixture->depends as $dep) {
// need to use the configuration provided in test case
$stack[] = isset($config[$dep]) ? $config[$dep] : ['class' => $dep];
}
}
// if the fixture is already loaded (ie. a circular dependency or if two fixtures depend on the same fixture) just skip it.
}
}
return $instances;
}
現在のテストケースに必要なフィクスチャを宣言します。
このメソッドの戻り値は、フィクスチャ設定の配列でなければなりません。例えば、
[
// anonymous fixture
PostFixture::class,
// "users" fixture
'users' => UserFixture::class,
// "cache" fixture with configuration
'cache' => [
'class' => CacheFixture::class,
'host' => 'xxx',
],
]
テストケースで使用される実際のフィクスチャには、globalFixtures() と fixtures() の両方が含まれることに注意してください。
public array fixtures ( ) | ||
戻り値 | array |
現在のテストケースに必要なフィクスチャ |
---|
public function fixtures()
{
return [];
}
指定された名前のフィクスチャを返します。
public yii\test\Fixture|null getFixture ( $name ) | ||
$name | string |
フィクスチャ名。エイリアス名、またはエイリアスが使用されていない場合はクラス名です。 |
戻り値 | yii\test\Fixture|null |
フィクスチャオブジェクト、または指定された名前のフィクスチャが存在しない場合はnull。 |
---|
public function getFixture($name)
{
if ($this->_fixtures === null) {
$this->_fixtures = $this->createFixtures(array_merge($this->globalFixtures(), $this->fixtures()));
}
$name = ltrim($name, '\\');
return isset($this->_fixtures[$name]) ? $this->_fixtures[$name] : null;
}
globalFixtures() と fixtures() で指定されたフィクスチャオブジェクトを返します。
public yii\test\Fixture[] getFixtures ( ) | ||
戻り値 | yii\test\Fixture[] |
現在のテストケースでロードされたフィクスチャ |
---|
public function getFixtures()
{
if ($this->_fixtures === null) {
$this->_fixtures = $this->createFixtures(array_merge($this->globalFixtures(), $this->fixtures()));
}
return $this->_fixtures;
}
複数のテストケースで共有して使用するフィクスチャを宣言します。
fixtures() の戻り値と同様である必要があります。通常は、このメソッドを基底クラスでオーバーライドする必要があります。
参照: fixtures().
public array globalFixtures ( ) | ||
戻り値 | array |
異なるテストケースで共有され、必要とされるフィクスチャ。 |
---|
public function globalFixtures()
{
return [];
}
フィクスチャを初期化します。
public void initFixtures ( ) |
public function initFixtures()
{
$this->unloadFixtures();
$this->loadFixtures();
}
指定されたフィクスチャを読み込みます。
このメソッドは、各フィクスチャオブジェクトに対して yii\test\Fixture::load() を呼び出します。
public void loadFixtures ( $fixtures = null ) | ||
$fixtures | yii\test\Fixture[]|null |
ロードするフィクスチャ。このパラメータが指定されていない場合、getFixtures() の戻り値が使用されます。 |
public function loadFixtures($fixtures = null)
{
if ($fixtures === null) {
$fixtures = $this->getFixtures();
}
/* @var $fixture Fixture */
foreach ($fixtures as $fixture) {
$fixture->beforeLoad();
}
foreach ($fixtures as $fixture) {
$fixture->load();
}
foreach (array_reverse($fixtures) as $fixture) {
$fixture->afterLoad();
}
}
指定されたフィクスチャをアンロードします。
このメソッドは、各フィクスチャオブジェクトに対して yii\test\Fixture::unload() を呼び出します。
public void unloadFixtures ( $fixtures = null ) | ||
$fixtures | yii\test\Fixture[]|null |
ロードするフィクスチャ。このパラメータが指定されていない場合、getFixtures() の戻り値が使用されます。 |
public function unloadFixtures($fixtures = null)
{
if ($fixtures === null) {
$fixtures = $this->getFixtures();
}
/* @var $fixture Fixture */
foreach ($fixtures as $fixture) {
$fixture->beforeUnload();
}
$fixtures = array_reverse($fixtures);
foreach ($fixtures as $fixture) {
$fixture->unload();
}
foreach ($fixtures as $fixture) {
$fixture->afterUnload();
}
}
コメントするにはサインアップまたはログインしてください。