在Codeception测试

时间:2015-04-27 12:44:58

标签: php composer-php yii2 codeception

我开始在Yii2中使用Codeception进行单元测试。太棒了Yii2现在完全拥抱它,这是我升级的一个主要原因!

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

E.g。这个控制器:

<?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();
    }

}

我在输出中的控制台中codeception run unit时的结果:

  

致命错误。测试未完成。

     

未找到“app\controllers\RecipesController”类

我的_bootstrap.php文件包含以下内容:

require_once(__DIR__ . '/../../vendor/autoload.php');
require_once(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');

所以我确信我做错了但却一无所知。

2 个答案:

答案 0 :(得分:3)

我通过在全局Codeception引导程序文件中显式创建Yii应用程序解决了这个问题。

也就是说,在Name: David Powers | Book: "The Hitchhiker's Guide to the Galaxy" by Douglas Adams Answer: 42Line 1 Line 2 内,附加了以下代码行:

tests/_bootstrap.php

最有可能是因为只有在new yii\web\Application(require(__DIR__ . '/../config/test.php')); 构造函数中,自动加载器实际上才附加到运行时。

答案 1 :(得分:1)

当我遇到此错误时,我发现我没有完成所有必要的设置。由于未在Yii2配置中设置应用程序基本路径,通常会发生此错误。一步一步:

  1. 检查您是否在codeception.yml中启用了启用的Yii2模块和包含的引导程序文件:

    paths:
        tests: tests
    <...skipped...>
    settings:
        bootstrap: _bootstrap.php
    modules:
        config:
            Yii2:
                configFile: 'config/test.php'
                cleanup: false
    
  2. 检查您是否有测试的配置文件(config/test.php)(可以将任何其他设置添加到此最小配置中):

    <?php
    
    return [
        'id' => 'prunto-test',
        'basePath' => dirname(__DIR__),
    ];
    
  3. tests/_bootstrap.php中包含Yii2(文件夹test / unit中的_bootstrap.php,测试/功能和测试/接受可以为空):

    <?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');
    
  4. 检查tests/unit.suite中是否启用了Yii2模块,如下所示:

    actor: ...
    modules:
        enabled:
            - Asserts
            - Yii2
    
  5. 重建代码:./vendor/bin/cept build