2015-04-16 65 views
4

在Yii2中使用Codeception進行驗收測試,並且無法訪問我的模型,因爲名稱空間不能用於這些測試。命名空間與Codeception(Yii2)不兼容

我有這個在我的測試/ _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__)); 

這在我的控制檯/配置/主

<?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' => '[email protected]ample.com', 
    'supportEmail' => '[email protected]', 
    'user.passwordResetTokenExpire' => 3600, 
]; 

這是崇拜者的測試之一:

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

... 

運行測試時出現此錯誤:

PHP Fatal error: Class 'backend\models\User' not found in /var/www/project/tests/acceptance/ListUserCest.php on line 21 Error: Class 'backend\models\User' not found

請幫幫我吧,我已經嘗試了一切,我知道

編輯

現在我可以使用例如(添加由vitalik_74建議行之後),\ Yii的方法進入測試,但無需Web應用程序配置,只需配置控制檯即可。 我的意思是,我仍然不能使用\ backend \ models \ User,並且我不能訪問Yii :: $ app->用戶狀態(例如檢查用戶是否已登錄)。

用戶模型只是一個普通的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'; 
    } 
... 
+1

請張貼後端\型號\ User類 – scaisEdge

+0

試試這個。在文件末尾添加'_bootstrap.php'這個 - 'Yii :: setAlias('@ tests',dirname(__ DIR __));' –

+0

請將後端\ models \ User類放入不是ListUserCest類 – scaisEdge

回答

0

的把下面的代碼來測試/ _bootstrap.php:

require('vendor/autoload.php'); 
require('vendor/yiisoft/yii2/Yii.php'); 
$config = require('config/web.php'); 
(new yii\web\Application($config));