# FixtureTrait

> FixtureTrait provides functionalities for loading, unloading and accessing fixtures for a test case.

[API reference](/docs/api/index.md) › [yii](/docs/api/yii/index.md) › [test](/docs/api/yii/test/index.md) › FixtureTrait

| trait | `yii\test\FixtureTrait` |
| --- | --- |
| Since | 2.0 |
| Source | [`framework/test/FixtureTrait.php`](https://github.com/yiisoft/yii2/blob/22.0/framework/test/FixtureTrait.php#L28) |

Used by 1 type:

- [`yii\console\controllers\FixtureController`](/docs/api/yii/console/controllers/fixturecontroller/index.md)

FixtureTrait provides functionalities for loading, unloading and accessing fixtures for a test case.

By using FixtureTrait, a test class will be able to specify which fixtures to load by overriding
the [`fixtures()`](/docs/api/yii/test/fixturetrait/index.md#method-fixtures) method. It can then load and unload the fixtures using [`loadFixtures()`](/docs/api/yii/test/fixturetrait/index.md#method-loadFixtures) and [`unloadFixtures()`](/docs/api/yii/test/fixturetrait/index.md#method-unloadFixtures).
Once a fixture is loaded, it can be accessed like an object property, thanks to the PHP `__get()` magic method.
Also, if the fixture is an instance of [`ActiveFixture`](/docs/api/yii/test/activefixture/index.md), you will be able to access AR models
through the syntax `$this->fixtureName('model name')`.

For more details and usage information on FixtureTrait, see the [guide article on fixtures](/docs/guide/test-fixtures/index.md).

## Methods

| Method | Description | Defined by |
| --- | --- | --- |
| [`fixtures()`](#method-fixtures) | Declares the fixtures that are needed by the current test case. | `FixtureTrait` |
| [`getFixture()`](#method-getFixture) | Returns the named fixture. | `FixtureTrait` |
| [`getFixtures()`](#method-getFixtures) | Returns the fixture objects as specified in [`globalFixtures()`](/docs/api/yii/test/fixturetrait/index.md#method-globalFixtures) and [`fixtures()`](/docs/api/yii/test/fixturetrait/index.md#method-fixtures). | `FixtureTrait` |
| [`globalFixtures()`](#method-globalFixtures) | Declares the fixtures shared required by different test cases. | `FixtureTrait` |
| [`initFixtures()`](#method-initFixtures) | Initialize the fixtures. | `FixtureTrait` |
| [`loadFixtures()`](#method-loadFixtures) | Loads the specified fixtures. | `FixtureTrait` |
| [`unloadFixtures()`](#method-unloadFixtures) | Unloads the specified fixtures. | `FixtureTrait` |
| [`createFixtures()`](#method-createFixtures) protected | Creates the specified fixture instances. | `FixtureTrait` |

## Method details

### fixtures() <span id="method-fixtures"></span>

```php
public function fixtures(): array
```

Declares the fixtures that are needed by the current test case.

The return value of this method must be an array of fixture configurations. For example,

```
[
    // anonymous fixture
    PostFixture::class,
    // "users" fixture
    'users' => UserFixture::class,
    // "cache" fixture with configuration
    'cache' => [
         'class' => CacheFixture::class,
         'host' => 'xxx',
    ],
]
```

Note that the actual fixtures used for a test case will include both [`globalFixtures()`](/docs/api/yii/test/fixturetrait/index.md#method-globalFixtures)
and [`fixtures()`](/docs/api/yii/test/fixturetrait/index.md#method-fixtures).

**Returns**

`array`: The fixtures needed by the current test case

### getFixture() <span id="method-getFixture"></span>

```php
public function getFixture(string $name): yii\test\Fixture|null
```

Returns the named fixture.

**Parameters**

| Parameter | Type | Description |
| --- | --- | --- |
| `$name` | `string` | The fixture name. This can be either the fixture alias name, or the class name if the alias is not used. |

**Returns**

[`Fixture`](/docs/api/yii/test/fixture/index.md)`|null`: The fixture object, or null if the named fixture does not exist.

### getFixtures() <span id="method-getFixtures"></span>

```php
public function getFixtures(): yii\test\Fixture[]
```

Returns the fixture objects as specified in [`globalFixtures()`](/docs/api/yii/test/fixturetrait/index.md#method-globalFixtures) and [`fixtures()`](/docs/api/yii/test/fixturetrait/index.md#method-fixtures).

**Returns**

[`Fixture`](/docs/api/yii/test/fixture/index.md)`[]`: The loaded fixtures for the current test case

### globalFixtures() <span id="method-globalFixtures"></span>

```php
public function globalFixtures(): array
```

Declares the fixtures shared required by different test cases.

The return value should be similar to that of [`fixtures()`](/docs/api/yii/test/fixturetrait/index.md#method-fixtures).
You should usually override this method in a base class.

**Returns**

`array`: The fixtures shared and required by different test cases.

**See also**

- [`fixtures()`](/docs/api/yii/test/fixturetrait/index.md#method-fixtures)

### initFixtures() <span id="method-initFixtures"></span>

```php
public function initFixtures(): mixed
```

Initialize the fixtures.

**Returns**

`mixed`

**Since**

2.0.12

### loadFixtures() <span id="method-loadFixtures"></span>

```php
public function loadFixtures(yii\test\Fixture[]|null $fixtures = null): mixed
```

Loads the specified fixtures.

This method will call [`Fixture::load()`](/docs/api/yii/test/fixture/index.md#method-load) for every fixture object.

**Parameters**

| Parameter | Type | Description |
| --- | --- | --- |
| `$fixtures` | [`Fixture`](/docs/api/yii/test/fixture/index.md)`[]\|null` | The fixtures to be loaded. If this parameter is not specified, the return value of [`getFixtures()`](/docs/api/yii/test/fixturetrait/index.md#method-getFixtures) will be used. |

**Returns**

`mixed`

### unloadFixtures() <span id="method-unloadFixtures"></span>

```php
public function unloadFixtures(yii\test\Fixture[]|null $fixtures = null): mixed
```

Unloads the specified fixtures.

This method will call [`Fixture::unload()`](/docs/api/yii/test/fixture/index.md#method-unload) for every fixture object.

**Parameters**

| Parameter | Type | Description |
| --- | --- | --- |
| `$fixtures` | [`Fixture`](/docs/api/yii/test/fixture/index.md)`[]\|null` | The fixtures to be loaded. If this parameter is not specified, the return value of [`getFixtures()`](/docs/api/yii/test/fixturetrait/index.md#method-getFixtures) will be used. |

**Returns**

`mixed`

### createFixtures() <span id="method-createFixtures"></span>

```php
protected function createFixtures(array $fixtures): yii\test\Fixture[]
```

Creates the specified fixture instances.

All dependent fixtures will also be created. Duplicate fixtures and circular dependencies will only be created once.

**Parameters**

| Parameter | Type | Description |
| --- | --- | --- |
| `$fixtures` | `array` | The fixtures to be created. You may provide fixture names or fixture configurations. If this parameter is not provided, the fixtures specified in [`globalFixtures()`](/docs/api/yii/test/fixturetrait/index.md#method-globalFixtures) and [`fixtures()`](/docs/api/yii/test/fixturetrait/index.md#method-fixtures) will be created. |

**Returns**

[`Fixture`](/docs/api/yii/test/fixture/index.md)`[]`: The created fixture instances

**Throws**

- [`yii\base\InvalidConfigException`](/docs/api/yii/base/invalidconfigexception/index.md): if fixtures are not properly configured