Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Can';在Codeception测试中找不到Yii2类_Php_Composer Php_Yii2_Codeception - Fatal编程技术网

Php Can';在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

我开始在Yi2中使用Codeception进行单元测试。很好,Yi2现在完全接受了它,这是我升级的主要原因

我很难让Codeception找到类。我编写的控制器类,例如,这些类通过在Yii2应用程序中自动加载而加载良好

例如,该控制器:

<?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文件夹中可以为空):

  • 重建codeception:
    /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