我开始在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');
所以我确信我做错了但却一无所知。
答案 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配置中设置应用程序基本路径,通常会发生此错误。一步一步:
检查您是否在codeception.yml
中启用了启用的Yii2模块和包含的引导程序文件:
paths:
tests: tests
<...skipped...>
settings:
bootstrap: _bootstrap.php
modules:
config:
Yii2:
configFile: 'config/test.php'
cleanup: false
检查您是否有测试的配置文件(config/test.php
)(可以将任何其他设置添加到此最小配置中):
<?php
return [
'id' => 'prunto-test',
'basePath' => dirname(__DIR__),
];
在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');
检查tests/unit.suite
中是否启用了Yii2模块,如下所示:
actor: ...
modules:
enabled:
- Asserts
- Yii2
重建代码:./vendor/bin/cept build