You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
3.5 KiB
113 lines
3.5 KiB
<?php |
|
/** |
|
* @link http://www.yiiframework.com/ |
|
* @copyright Copyright (c) 2008 Yii Software LLC |
|
* @license http://www.yiiframework.com/license/ |
|
*/ |
|
|
|
namespace yii\test; |
|
|
|
use Yii; |
|
|
|
/** |
|
* DbTestTrait implements the commonly used methods for setting up and accessing fixture data. |
|
* |
|
* To use DbTestTrait, call the [[loadFixtures()]] method in the setup method in a test case class. |
|
* The specified fixtures will be loaded and accessible through [[getFixtureData()]] and [[getFixtureModel()]]. |
|
* |
|
* For example, |
|
* |
|
* ~~~ |
|
* use yii\test\DbTestTrait; |
|
* use yii\codeception\TestCase; |
|
* use app\models\Post; |
|
* use app\models\User; |
|
* |
|
* class PostTestCase extends TestCase |
|
* { |
|
* use DbTestTrait; |
|
* |
|
* protected function setUp() |
|
* { |
|
* parent::setUp(); |
|
* |
|
* $this->loadFixtures([ |
|
* 'posts' => Post::className(), |
|
* 'users' => User::className(), |
|
* ]); |
|
* } |
|
* } |
|
* ~~~ |
|
* |
|
* @author Qiang Xue <qiang.xue@gmail.com> |
|
* @since 2.0 |
|
*/ |
|
trait DbTestTrait |
|
{ |
|
/** |
|
* Loads the specified fixtures. |
|
* |
|
* This method should typically be called in the setup method of test cases so that |
|
* the fixtures are loaded before running each test method. |
|
* |
|
* This method does the following things: |
|
* |
|
* - Run [[DbFixtureManager::initScript]] if it is found under [[DbFixtureManager::basePath]]. |
|
* - Clean up data and models loaded in memory previously. |
|
* - Load each specified fixture: |
|
* * Truncate the corresponding table. |
|
* * If a fixture file named `TableName.php` is found under [[DbFixtureManager::basePath]], |
|
* the file will be executed, and the return value will be treated as rows which will |
|
* then be inserted into the table. |
|
* |
|
* @param array $fixtures a list of fixtures (fixture name => table name or AR class name) to be loaded. |
|
* Each array element can be either a table name (with schema prefix if needed), or a fully-qualified |
|
* ActiveRecord class name (e.g. `app\models\Post`). An element can be optionally associated with a key |
|
* which will be treated as the fixture name. For example, |
|
* |
|
* ~~~ |
|
* [ |
|
* 'tbl_comment', |
|
* 'users' => 'tbl_user', // 'users' is the fixture name, 'tbl_user' is a table name |
|
* 'posts' => 'app\models\Post, // 'app\models\Post' is a model class name |
|
* ] |
|
* ~~~ |
|
* |
|
* @return array the loaded fixture data (fixture name => table rows) |
|
*/ |
|
public function loadFixtures(array $fixtures = []) |
|
{ |
|
return $this->getFixtureManager()->load($fixtures); |
|
} |
|
|
|
/** |
|
* Returns the DB fixture manager. |
|
* @return DbFixtureManager the DB fixture manager |
|
*/ |
|
public function getFixtureManager() |
|
{ |
|
return Yii::$app->getComponent('fixture'); |
|
} |
|
|
|
/** |
|
* Returns the table rows of the named fixture. |
|
* @param string $fixtureName the fixture name. |
|
* @return array the named fixture table rows. False is returned if there is no such fixture data. |
|
*/ |
|
public function getFixtureRows($fixtureName) |
|
{ |
|
return $this->getFixtureManager()->getRows($fixtureName); |
|
} |
|
|
|
/** |
|
* Returns the named AR instance corresponding to the named fixture. |
|
* @param string $fixtureName the fixture name. |
|
* @param string $modelName the name of the fixture data row |
|
* @return \yii\db\ActiveRecord the named AR instance corresponding to the named fixture. |
|
* Null is returned if there is no such fixture or the record cannot be found. |
|
*/ |
|
public function getFixtureModel($fixtureName, $modelName) |
|
{ |
|
return $this->getFixtureManager()->getModel($fixtureName, $modelName); |
|
} |
|
}
|
|
|