Vic*_*cas 5 namespaces yii2 codeception psr-4 yii2-advanced-app
我在Yii2中使用Codeception进行验收测试,并且无法访问我的模型,因为名称空间不适用于这些测试.
我在我的tests/_bootstrap.php中有这个
require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
$config = require(__DIR__ . '/../console/config/main.php');
//
$application = new yii\console\Application( $config );
## Added (@vitalik_74)
Yii::setAlias('@tests', dirname(__DIR__));
Run Code Online (Sandbox Code Playgroud)
这在我的console/config/main中
<?php
$params = array_merge(
require(__DIR__ . '/params.php'),
require(__DIR__ . '/params-local.php')
);
return [
'id' => 'app-console',
'basePath' => dirname(__DIR__),
'bootstrap' => ['log'],
'controllerNamespace' => 'console\controllers',
'components' => [
'log' => [
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
],
],
],
],
'params' => $params,
];
<?php
return [
'adminEmail' => 'admin@example.com',
'supportEmail' => 'support@example.com',
'user.passwordResetTokenExpire' => 3600,
];
Run Code Online (Sandbox Code Playgroud)
这是一个想要测试的人:
<?php namespace tests\acceptance;
use \AcceptanceTester;
use backend\models\User; ## I have tried writing it with a / at the beggining
class ListUserCest
{
public function _before(AcceptanceTester $I)
{
}
public function _after(AcceptanceTester $I)
{
}
public function init(AcceptanceTester $I)
{
$this->login($I);
if( User::find()->exists() )
$I->amGoingTo('List Users having at least one');
else
$I->amGoingTo('List Users having any');
}
...
Run Code Online (Sandbox Code Playgroud)
运行测试时出现此错误:
PHP致命错误:第21行/var/www/project/tests/acceptance/ListUserCest.php中找不到类'后端\ models\User'错误:未找到类'后端\ models\User'
请帮助我,我已经尝试了所有我知道的事情
编辑
现在(在添加了vitalik_74推荐的行之后)我可以使用例如\ Yii方法进入测试但是没有Web应用程序配置,只有控制台配置.我的意思是,我仍然无法使用\ backend\models\User,我也无法访问Yii :: $ app->用户状态(例如,检查是否记录了用户).
User模型只是一个常见的ActiveRecord模型,包含tableName,rules,attributeLabels和一些关系方法,如getProfile().它完成了测试
<?php
namespace backend\models;
use common\helpers\MathHelper;
use backend\models\AntropometricData;
use Yii;
class User extends \yii\db\ActiveRecord
{
/**
* @inheritdoc
*/
public static function tableName()
{
return 'user';
}
...
Run Code Online (Sandbox Code Playgroud)
小智 2
将以下代码放入tests/_bootstrap.php:
require('vendor/autoload.php');
require('vendor/yiisoft/yii2/Yii.php');
$config = require('config/web.php');
(new yii\web\Application($config));
Run Code Online (Sandbox Code Playgroud)