生成测试时需要的大量假数据!
安装和配置
如果你使用 Yii2 高级模板,那么 yiisoft/yii2-faker 是默认存在的,但它不会被默认加到组件里,以高级模板为例子,在 console/config/main.php
里加入如下配置:
'controllerMap' => [
'fixture' => [
'class' => 'yii\faker\FixtureController',
],
],
并在 console/config/bootstrap.php
里定义 tests
目录:
Yii::setAlias('@tests', dirname(__DIR__) . '/tests');
创建模板
在 tests 目录下创建模板文件 unit/templates/fixtures/users.php
<?php
/**
* @var $faker \Faker\Generator
* @var $index integer
*/
return [
'username' => $faker->name,
'password_hash' => Yii::$app->getSecurity()->generatePasswordHash("123456{$index}"),
'created_at' => $faker->unixTime(),
];
其中 $index
是从 0 开始的数组索引,$faker
是 Faker 对象,可用的属性和函数可以在目录 vendor/fzaninotto/faker/src/Faker/Provider
里找到,有空的话我可以写一篇介绍。
生成假数据
在项目根目录(yii
脚本存在的位置)打开命令窗口,执行如下命令:
php yii fixture/generate users --count=2
生成的假数据会被放在 tests/unit/fixtures/data/users.php
里:
<?php
return [
'users0' => [
'username' => 'Emerson Wiza MD',
'password_hash' => '$2y$13$8XCqeNKQYnF5DfCakluWr.wnGZW6AY6nSQmmrIiZSU1Kl85U6F.HS',
'created_at' => 393316190,
],
'users1' => [
'username' => 'Dr. Ismael Boehm Sr.',
'password_hash' => '$2y$13$DMGJbzswZemnAWpRWpFPAOz66DKjb69pSEAXB2stocaoxYi78MP/i',
'created_at' => 1335650465,
],
];
可以注意到,这里的用户名是英文的,后面会说生成中文的方法。
使用假数据
可以使用如下代码将数据插入数据库:
$data = require Yii::getAlias('@console/tests/unit/fixtures/data/users.php');
Yii::$app->db->createCommand()->batchInsert('{{%users}}', ['username', 'password_hash', 'created_at'], $data)->execute();
常用指令说明
--language=zh_CN
可以生成中文的假数据--templatePath
可以指定模板路径
例如:
php yii fixture/generate users --count=2 --templatePath=@tests/unit/templates/fixtures --language=zh_CN
更多说明可以参考 Yii 中文网的文档