Browse Source

Refactored unit tests.

tags/2.0.0-beta
Qiang Xue 11 years ago
parent
commit
0788e1045f
  1. 2
      apps/basic/tests/unit/_bootstrap.php
  2. 27
      extensions/yii/codeception/TestCase.php
  3. 7
      framework/yii/test/DbFixtureManager.php
  4. 7
      framework/yii/test/DbTestTrait.php

2
apps/basic/tests/unit/_bootstrap.php

@ -1,5 +1,3 @@
<?php <?php
// add unit testing specific bootstrap code here // add unit testing specific bootstrap code here
yii\codeception\TestCase::$appConfig = require(__DIR__ . '/_config.php');

27
extensions/yii/codeception/TestCase.php

@ -17,12 +17,10 @@ class TestCase extends Test
/** /**
* @var array|string the application configuration that will be used for creating an application instance for each test. * @var array|string the application configuration that will be used for creating an application instance for each test.
* You can use a string to represent the file path or path alias of a configuration file. * You can use a string to represent the file path or path alias of a configuration file.
* The application configuration array may contain an optional `class` element which specifies the class
* name of the application instance to be created. By default, a [[yii\web\Application]] instance will be created.
*/ */
public static $appConfig = []; public $appConfig = '@tests/unit/_config.php';
/**
* @var string the application class that [[mockApplication()]] should use
*/
public static $appClass = 'yii\web\Application';
/** /**
* @inheritdoc * @inheritdoc
@ -47,17 +45,26 @@ class TestCase extends Test
* @param array $config the configuration that should be used to generate the application instance. * @param array $config the configuration that should be used to generate the application instance.
* If null, [[appConfig]] will be used. * If null, [[appConfig]] will be used.
* @return \yii\web\Application|\yii\console\Application the application instance * @return \yii\web\Application|\yii\console\Application the application instance
* @throws InvalidConfigException if the application configuration is invalid
*/ */
protected function mockApplication($config = null) protected function mockApplication($config = null)
{ {
$config = $config === null ? static::$appConfig : $config; $config = $config === null ? $this->appConfig : $config;
if (is_string($config)) { if (is_string($config)) {
$config = Yii::getAlias($config); $configFile = Yii::getAlias($config);
if (!is_file($configFile)) {
throw new InvalidConfigException("The application configuration file does not exist: $config");
}
$config = require($configFile);
}
if (is_array($config)) {
if (!isset($config['class'])) {
$config['class'] = 'yii\web\Application';
} }
if (!is_array($config)) { return Yii::createObject($config);
throw new InvalidConfigException('Please provide a configuration for creating application.'); } else {
throw new InvalidConfigException('Please provide a configuration array to mock up an application.');
} }
return new static::$appClass($config);
} }
/** /**

7
framework/yii/test/DbFixtureManager.php

@ -10,7 +10,6 @@ namespace yii\test;
use Yii; use Yii;
use yii\base\Component; use yii\base\Component;
use yii\base\InvalidConfigException; use yii\base\InvalidConfigException;
use yii\db\ActiveRecord;
use yii\db\ActiveRecordInterface; use yii\db\ActiveRecordInterface;
use yii\db\Connection; use yii\db\Connection;
@ -185,7 +184,7 @@ class DbFixtureManager extends Component
* Returns the specified ActiveRecord instance in the fixture data. * Returns the specified ActiveRecord instance in the fixture data.
* @param string $fixtureName the fixture name * @param string $fixtureName the fixture name
* @param string $modelName the alias for the fixture data row * @param string $modelName the alias for the fixture data row
* @return \yii\db\ActiveRecord the ActiveRecord instance. Null is returned if there is no such fixture row. * @return ActiveRecordInterface the ActiveRecord instance. Null is returned if there is no such fixture row.
*/ */
public function getModel($fixtureName, $modelName) public function getModel($fixtureName, $modelName)
{ {
@ -196,9 +195,9 @@ class DbFixtureManager extends Component
return $this->_models[$fixtureName][$modelName]; return $this->_models[$fixtureName][$modelName];
} }
$row = $this->_rows[$fixtureName][$modelName]; $row = $this->_rows[$fixtureName][$modelName];
/** @var \yii\db\ActiveRecord $modelClass */ /** @var ActiveRecordInterface $modelClass */
$modelClass = $this->_models[$fixtureName]; $modelClass = $this->_models[$fixtureName];
/** @var \yii\db\ActiveRecord $model */ /** @var ActiveRecordInterface $model */
$model = new $modelClass; $model = new $modelClass;
$keys = []; $keys = [];
foreach ($model->primaryKey() as $key) { foreach ($model->primaryKey() as $key) {

7
framework/yii/test/DbTestTrait.php

@ -19,15 +19,18 @@ use Yii;
* *
* ~~~ * ~~~
* use yii\test\DbTestTrait; * use yii\test\DbTestTrait;
* use yii\codeception\TestCase;
* use app\models\Post; * use app\models\Post;
* use app\models\User; * use app\models\User;
* *
* class PostTestCase extends \PHPUnit_Framework_TestCase * class PostTestCase extends TestCase
* { * {
* use DbTestTrait; * use DbTestTrait;
* *
* public function setUp() * protected function setUp()
* { * {
* parent::setUp();
*
* $this->loadFixtures([ * $this->loadFixtures([
* 'posts' => Post::className(), * 'posts' => Post::className(),
* 'users' => User::className(), * 'users' => User::className(),

Loading…
Cancel
Save