简介
Fixtures 是测试中非常重要的一部分。主要目的是建立一个固定/已知的环境状态以确保 测试可重复并且按照预期方式运行。
简答说就是Fixtures提供一种预填充数据的方式,即在测试前需要准备好哪些数据,以便测试可以正常展开,不受其他测试的影响。
一个 Fixture 可能依赖于其他的 Fixtures ,所定义的依赖会自动加载。
该方法相比于dump.sql
的填充方法更加灵活, 且不会出去填充的冲突问题.
配置
定义一个Fixtures
通过继成yii\test\ActiveFixture
, 并声明 modelClass
来定义一个Fixtures , depends
为要依赖的Fixtures, 可选。
Fixtures通常放置于tests
目录中的fixtures
目录下.
1 2 3 4 5 6 7 8 9 10 11
| <?php namespace tests\fixtures;
use yii\test\ActiveFixture;
class UserFixture extends ActiveFixture { public $modelClass = 'app\models\User'; public $depends = ['app\tests\fixtures\UserFixture']; }
|
设置填充数据
在 @tests/fixtures/data
目录中,每个Fixtures添加一个数据文档
在位置 @tests/fixtures/data/user.php
中, 设置以下数据, 为要被插入用户表中的数据文件, user1
和user2
为别名, 方便调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <?php return [ 'user1' => [ 'username' => 'lmayert', 'email' => 'strosin.vernice@jerde.com', 'auth_key' => 'K3nF70it7tzNsHddEiq0BZ0i-OU8S3xV', 'password' => '$2y$13$WSyE5hHsG1rWN2jV8LRHzubilrCLI5Ev/iK0r3jRuwQEs2ldRu.a2', ], 'user2' => [ 'username' => 'napoleon69', 'email' => 'aileen.barton@heaneyschumm.com', 'auth_key' => 'dZlXsVnIDgIzFgX4EduAqkEPuphhOh9q', 'password' => '$2y$13$kkgpvJ8lnjKo8RuoR30ay.RjDf15bMcHIF7Vz1zz/6viYG5xJExU6', ], ];
|
使用
在测试用例中, 通过定义_fixtures方法
, 声明需要使用的Fixtures及填充数据文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| /** * @var \UnitTester */ protected $tester;
public function _fixtures() { return [ 'users' => [ 'class' => UserFixture::className(), 'dataFile' => '@tests/fixtures/data/user.php' ], 'profiles' => [ 'class' => UserProfileFixture::className(), 'dataFile' => '@tests/fixtures/data/user_profile.php' ], ]; }
|
通过如下方法, 可以获取插入的记录, 返回值为该Fixture类中对应的modelClass
的一个实例
1 2
| $user = $this->tester->grabFixture('users', 'default');
|
参考资料
Fixtures
Fixtures