Фикстуры, описанные выше, в основном используются в рамках определенных тест-кейсов. В большинстве случаев, вам также нужны
глобальные фикстры, которые применяются во ВСЕХ или большинстве тест-кейсов. Примером является фикстура [[yii\test\InitDbFixture]],
которая делает 2 вещи:
* Запускает скрипт `@app/tests/fixtures/initdb.php` для выполнения ряда общих задач инициализации тестового окружения;
* Отключает проверку целостности данных перед загрузкой остальных фикстур, и включает ее обратно после того как все остальные фикстуры будут выгружены.
Использование глобальных фикстур схоже с использованием не глобальных. Единственное отличие в том, что вы должны объявить эти
фикстуры в методе [[yii\codeception\TestCase::globalFixtures()]], а не `fixtures()`. Когда тест-кейс загружает фикстуры, сначала
загружаются глобальные фикстуры, затем все остальные.
По умолчанию, фикстура `InitDbFixture` уже обяъвлена в методе `globalFixtures()` класса [[yii\codeception\DbTestCase]].
Это означает, что вы должны работать только с файлом `@app/tests/fixtures/initdb.php`, если вы хотите чтобы перед каждым тестом
выполнялись определенные подготовительные работы. В противном случае вы просто можете сфокусироваться на разработке
конкретных тест-кейсов и соответствующих фикстур.
Организация классов фикстур и файлов с данными
----------------------------------------------
По умолчанию, классы фикстур ищут соответствующие файлы данных в директории `data`, которая является подпапкой папки, содержащей
файлы классов фикстур. Вы можете следовать этому соглашению при работе над простыми проектами. Есть вероятность, что на больших
проектах вам потребуется менять набор данных для одного и того же класса фикстур в разных тестах. Таким образом, мы рекомендуем
вам организовать файлы данных иерархически, подобно пространству имен ваших классов. Например,
```
# в папке tests\unit\fixtures
data\
components\
fixture_data_file1.php
fixture_data_file2.php
...
fixture_data_fileN.php
models\
fixture_data_file1.php
fixture_data_file2.php
...
fixture_data_fileN.php
# и так далее
```
Таким образом вы избежите коллизий файлов данных фикстур между тестами и будете использовать их, как вам нужно.
> todo: данный раздел может быть объединен с предыдущими частями test-fixtures.md
Фикстуры являются важной составляющей тестирования. Их основная задача в предоставлении набора данных, необходимого для тестирования
различных сценариев работы вашего приложения. С этими данными использование ваших тестов становятся более эффективным и полезным.
Yii поддерживает фикстуры через утилиту командной строки `yii fixture`. Эта утилита поддерживает:
* Загрузку фикстур в различные хранилища, такие как: RDBMS, NoSQL и другие;
* Выгрузку фикстур разными способами (как правило очищает хранилище);
* Автоматическую генерацию фикстур и наполнение их случайными данными
Формат фикстуры
---------------
Фикстуры - это объекты с различными методами и конфигурацией, с которыми вы можете ознакомиться в официальной [документации](https://github.com/yiisoft/yii2/blob/master/docs/guide/test-fixture.md).
Давайте предположим, что у нас есть следующий набор данных фикстуры для загрузки:
```
# файл users.php в директории файлов данных фикстур, по умолчанию @tests\unit\fixtures\data
Если вы используете фикстуру, которая загружает данные в базу данных, то эти строки будут применены к таблице `users`.
Если вы используете фикстуру для загрузки данных в nosql, например, фикстура для `mongodb`, то данные будут применены к коллекции `users`.
Для того, чтобы узнать о реализации различных сценариях загрузки фикстур, обратитесь к официальной [документации](https://github.com/yiisoft/yii2/blob/master/docs/guide/test-fixture.md).
Предыдущий пример фикстуры был сгенерирован автоматически с использованием расширения `yii2-faker`, подробнее про это читайте в этом [разделе](#auto-generating-fixtures).
Имя класса фикстуры должно быть в единственном числе.
Загрузка фикстур
----------------
Класс фикстур должны содержать суффикс `Fixture`. По умолчанию поиск фикстур выполняется в пространстве имен `tests\unit\fixtures`, но вы можете изменить это поведение
через конфигурационный файл или параметры команды. Вы можете исключить некоторые фикстуры из загрузки или выгрузки добавив `-` перед их именем, например `-User`.
Чтобы загрузить фикстуру, выполните следующую команду::
```
yii fixture/load <fixture_name>
```
Обязательный параметр `fixture_name` указываем на имя фикстуры, которая должна быть загружена. Вы можете загрузить несколько фикстур за раз.
Ниже указаны примеры корректного использования данной команды:
```
// загрузить фикстуру `User`
yii fixture/load User
// тоже что и выше, т.к. "load" является действие по умолчанию для команды "fixture"
yii fixture User
// загрузить нескольких фикстур
yii fixture User UserProfile
// загрузить все фикстуры
yii fixture/load "*"
// тоже что и выше
yii fixture "*"
// загрузить все фикстуры кроме указанной
yii fixture "*" -DoNotLoadThisOne
// загрузка фикстур, но искать их следует в другом пространстве имен. Пространство имен по умолчанию: tests\unit\fixtures.
yii fixture User --namespace='alias\my\custom\namespace'
// загрузить глобальную фикстуру `some\name\space\CustomFixture` перед загрузкой остальных фикстур.
// По умолчанию данный параметр установлен в `InitDbFixture` для включения/отключения проверки целостности данных.
// Вы можете задать несколько глобальных фикстур, указав их через запятую
yii fixture User --globalFixtures='some\name\space\Custom'
```
Выгрузка фикстур
----------------
Для выгрузки фикстур выполните следующую команду:
```
// выгрузить фикстуру `Users`, по умолчанию будут удалены все данные из таблицы "users", или из коллекции "users" если это фикстура mongodb
yii fixture/unload User
// выгрузить несколько фикстур
yii fixture/unload User,UserProfile
// выгрузить все фикстуры
yii fixture/unload "*"
// выгрузить все фикстуры за исключением указанной
yii fixture/unload "*" -DoNotUnloadThisOne
```
При выгрузке фикстур вы также можете использовать параметры `namespace` и `globalFixtures`.
Глобальная настройка команды
----------------------------
Хотя параметры командой строки и позволяют нам настраивать команду миграции на лету, иногда нам может понадобиться настроить
команду один раз для всех сценариев запуска. Например, вы можете настроить различные пути до файлов с фикстурами как в примере ниже:
Yii также может автоматически генерировать для вас фикстуры на основе некоторого шаблона. Вы можете генерировать фикстуры с
различных набором данных на разных языках и в разных форматах. Данная возможность основана на использовании библиотеки [Faker](https://github.com/fzaninotto/Faker)