mirror of
https://github.com/yiisoft/yii2.git
synced 2025-08-16 07:11:19 +08:00
133 lines
4.9 KiB
Markdown
133 lines
4.9 KiB
Markdown
Managing Fixtures
|
|
=================
|
|
|
|
// todo: this tutorial may be merged into test-fixture.md
|
|
|
|
Fixtures are important part of testing. Their main purpose is to populate you with data that needed by testing
|
|
different cases. With this data using your tests becoming more efficient and useful.
|
|
|
|
Yii supports fixtures via the `yii fixture` command line tool. This tool supports:
|
|
|
|
* Loading fixtures to different storage such as: RDBMS, NoSQL, etc;
|
|
* Unloading fixtures in different ways (usually it is clearing storage);
|
|
* Auto-generating fixtures and populating it with random data.
|
|
|
|
Fixtures format
|
|
---------------
|
|
|
|
Fixtures are objects with different methods and configurations, refer to official [documentation](https://github.com/yiisoft/yii2/blob/master/docs/guide/test-fixture.md) on them.
|
|
Lets assume we have fixtures data to load:
|
|
|
|
```
|
|
#users.php file under fixtures data path, by default @tests\unit\fixtures\data
|
|
|
|
return [
|
|
[
|
|
'name' => 'Chase',
|
|
'login' => 'lmayert',
|
|
'email' => 'strosin.vernice@jerde.com',
|
|
'auth_key' => 'K3nF70it7tzNsHddEiq0BZ0i-OU8S3xV',
|
|
'password' => '$2y$13$WSyE5hHsG1rWN2jV8LRHzubilrCLI5Ev/iK0r3jRuwQEs2ldRu.a2',
|
|
],
|
|
[
|
|
'name' => 'Celestine',
|
|
'login' => 'napoleon69',
|
|
'email' => 'aileen.barton@heaneyschumm.com',
|
|
'auth_key' => 'dZlXsVnIDgIzFgX4EduAqkEPuphhOh9q',
|
|
'password' => '$2y$13$kkgpvJ8lnjKo8RuoR30ay.RjDf15bMcHIF7Vz1zz/6viYG5xJExU6',
|
|
],
|
|
];
|
|
```
|
|
If we are using fixture that loads data into database then these rows will be applied to `users` table. If we are using nosql fixtures, for example `mongodb`
|
|
fixture, then this data will be applied to `users` mongodb collection. In order to learn about implementing various loading strategies and more, refer to official [documentation](https://github.com/yiisoft/yii2/blob/master/docs/guide/test-fixture.md).
|
|
Above fixture example was auto-generated by `yii2-faker` extension, read more about it in these [section](#auto-generating-fixtures).
|
|
Fixture classes name should not be plural.
|
|
|
|
Loading fixtures
|
|
----------------
|
|
|
|
Fixture classes should be suffixed by `Fixture` class. By default fixtures will be searched under `tests\unit\fixtures` namespace, you can
|
|
change this behavior with config or command options.
|
|
|
|
To load fixture, run the following command:
|
|
|
|
```
|
|
yii fixture/load <fixture_name>
|
|
```
|
|
|
|
The required `fixture_name` parameter specifies a fixture name which data will be loaded. You can load several fixtures at once.
|
|
Below are correct formats of this command:
|
|
|
|
```
|
|
// load `users` fixture
|
|
yii fixture/load User
|
|
|
|
// same as above, because default action of "fixture" command is "load"
|
|
yii fixture User
|
|
|
|
// load several fixtures. Note that there should not be any whitespace between ",", it should be one string.
|
|
yii fixture User,UserProfile
|
|
|
|
// load all fixtures
|
|
yii fixture/load all
|
|
|
|
// same as above
|
|
yii fixture all
|
|
|
|
// load fixtures, but for other database connection.
|
|
yii fixture User --db='customDbConnectionId'
|
|
|
|
// load fixtures, but search them in different namespace. By default namespace is: tests\unit\fixtures.
|
|
yii fixture User --namespace='alias\my\custom\namespace'
|
|
|
|
// load global fixture `some\name\space\CustomFixture` before other fixtures will be loaded.
|
|
// By default this option is set to `InitDbFixture` to disable/enable integrity checks. You can specify several
|
|
// global fixtures separated by comma.
|
|
yii fixture User --globalFixtures='some\name\space\Custom'
|
|
```
|
|
|
|
Unloading fixtures
|
|
------------------
|
|
|
|
To unload fixture, run the following command:
|
|
|
|
```
|
|
// unload Users fixture, by default it will clear fixture storage (for example "users" table, or "users" collection if this is mongodb fixture).
|
|
yii fixture/unload User
|
|
|
|
// Unload several fixtures. Note that there should not be any whitespace between ",", it should be one string.
|
|
yii fixture/unload User,UserProfile
|
|
|
|
// unload all fixtures
|
|
yii fixture/unload all
|
|
```
|
|
|
|
Same command options like: `db`, `namespace`, `globalFixtures` also can be applied to this command.
|
|
|
|
Configure Command Globally
|
|
--------------------------
|
|
While command line options allow us to configure the migration command
|
|
on-the-fly, sometimes we may want to configure the command once for all. For example you can configure
|
|
different migration path as follows:
|
|
|
|
```
|
|
'controllerMap' => [
|
|
'fixture' => [
|
|
'class' => 'yii\console\controllers\FixtureController',
|
|
'db' => 'customDbConnectionId',
|
|
'namespace' => 'myalias\some\custom\namespace',
|
|
'globalFixtures' => [
|
|
'some\name\space\Foo',
|
|
'other\name\space\Bar'
|
|
],
|
|
],
|
|
]
|
|
```
|
|
|
|
Auto-generating fixtures
|
|
------------------------
|
|
|
|
Yii also can auto-generate fixtures for you based on some template. You can generate your fixtures with different data on different languages and formats.
|
|
These feature is done by [Faker](https://github.com/fzaninotto/Faker) library and `yii2-faker` extension.
|
|
See extension [guide](https://github.com/yiisoft/yii2/tree/master/extensions/faker) for more docs.
|