0 フォロワー

トレイト 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

保護メソッド

継承されたメソッドを非表示

メソッド 説明 定義元
createFixtures() 指定されたフィクスチャインスタンスを作成します。 yii\test\FixtureTrait

メソッドの詳細

継承されたメソッドを非表示

createFixtures() protected method

指定されたフィクスチャインスタンスを作成します。

依存する全てのフィクスチャも作成されます。重複するフィクスチャと循環依存関係は、一度だけ作成されます。

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;
}

            
fixtures() public method

現在のテストケースに必要なフィクスチャを宣言します。

このメソッドの戻り値は、フィクスチャ設定の配列でなければなりません。例えば、

[
    // 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 [];
}

            
getFixture() public method

指定された名前のフィクスチャを返します。

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;
}

            
getFixtures() public method

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;
}

            
globalFixtures() publicメソッド

複数のテストケースで共有して使用するフィクスチャを宣言します。

fixtures() の戻り値と同様である必要があります。通常は、このメソッドを基底クラスでオーバーライドする必要があります。

参照: fixtures().

public array globalFixtures ( )
戻り値 array

異なるテストケースで共有され、必要とされるフィクスチャ。

                public function globalFixtures()
{
    return [];
}

            
initFixtures() publicメソッド (バージョン2.0.12から利用可能)

フィクスチャを初期化します。

public void initFixtures ( )

                public function initFixtures()
{
    $this->unloadFixtures();
    $this->loadFixtures();
}

            
loadFixtures() publicメソッド

指定されたフィクスチャを読み込みます。

このメソッドは、各フィクスチャオブジェクトに対して 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();
    }
}

            
unloadFixtures() publicメソッド

指定されたフィクスチャをアンロードします。

このメソッドは、各フィクスチャオブジェクトに対して 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();
    }
}