Php Can';在Codeception测试中找不到Yii2类
我开始在Yi2中使用Codeception进行单元测试。很好,Yi2现在完全接受了它,这是我升级的主要原因 我很难让Codeception找到类。我编写的控制器类,例如,这些类通过在Yii2应用程序中自动加载而加载良好 例如,该控制器:Php Can';在Codeception测试中找不到Yii2类,php,composer-php,yii2,codeception,Php,Composer Php,Yii2,Codeception,我开始在Yi2中使用Codeception进行单元测试。很好,Yi2现在完全接受了它,这是我升级的主要原因 我很难让Codeception找到类。我编写的控制器类,例如,这些类通过在Yii2应用程序中自动加载而加载良好 例如,该控制器: <?php class RecipeControllerTest extends \Codeception\TestCase\Test { /** * @var \UnitTester */ protected $teste
<?php
class RecipeControllerTest extends \Codeception\TestCase\Test
{
/**
* @var \UnitTester
*/
protected $tester;
protected function _before()
{
}
protected function _after()
{
}
// tests
public function testMe()
{
echo \app\controllers\RecipesController::getallrecipes();
}
}
因此,我确信我做错了什么,但我一无所知。看来,名称空间有什么问题。 这是工作单元测试的示例。您可以通过类似的方式进行尝试:在文件的开头声明名称空间并写入用法
<?php
namespace api\tests\unit\modules\v1\models;
use yii;
use api\tests\unit\DbTestCase;
use api\modules\v1\models\BaseModel;
class BaseModelTest extends DbTestCase {
protected function _before()
{
}
protected function _after()
{
}
public function testGetSettingsValue() {
$model = new BaseModel('project');
$value = $model->getSettingsValue('MIN_BALANCE_FOR_OUT');
verify($value)->equals(1000);
}
}
在别名中声明别名
Yii::setAlias('common', dirname(__DIR__));
Yii::setAlias('frontend', dirname(dirname(__DIR__)) . '/frontend');
Yii::setAlias('backend', dirname(dirname(__DIR__)) . '/backend');
Yii::setAlias('console', dirname(dirname(__DIR__)) . '/console');
Yii::setAlias('api', dirname(dirname(__DIR__)) . '/api');
我通过在全局Codeception引导文件中显式创建Yii应用程序解决了这个问题 也就是说,在
tests/_bootstrap.php
中,附加了以下代码行:
new yii\web\Application(require(__DIR__ . '/../config/test.php'));
最可能的原因是,只有在
应用程序
构造函数中,自动加载程序才实际连接到运行时。当我遇到此错误时,我发现我没有所有必要的设置。此错误通常是由于未在Yii2配置中设置应用程序基本路径而发生的。逐步:
codeception.yml
中启用了Yii2模块和包含的引导文件:
paths:
tests: tests
<...skipped...>
settings:
bootstrap: _bootstrap.php
modules:
config:
Yii2:
configFile: 'config/test.php'
cleanup: false
tests/\u bootstrap.php
中,包括Yii2(\u bootstrap.php
在tests/unit、tests/functional和tests/acceptance文件夹中可以为空):
/vendor/bin/cept build
new yii\web\Application(require(__DIR__ . '/../config/test.php'));
paths:
tests: tests
<...skipped...>
settings:
bootstrap: _bootstrap.php
modules:
config:
Yii2:
configFile: 'config/test.php'
cleanup: false
<?php
return [
'id' => 'prunto-test',
'basePath' => dirname(__DIR__),
];
<?php
define('YII_ENV', 'test');
defined('YII_DEBUG') or define('YII_DEBUG', true);
require_once __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
require __DIR__ .'/../vendor/autoload.php';
// add the custom namespaces here if they are not added in the config files:
// Yii::setAlias('frontend', dirname(dirname(__DIR__)) . '/frontend');
// Yii::setAlias('backend', dirname(dirname(__DIR__)) . '/backend');
actor: ...
modules:
enabled:
- Asserts
- Yii2