2014-01-06 1 views
2

Я пишу некоторые модульные тесты для своих контроллеров, однако я столкнулся с проблемой, когда не обнаруживается, что компоненты, которые определены в моем файле AppController, не являются унаследовал мой контроллер во время тестирования.Компоненты AppController CakePHP не наследуются компонентами во время тестирования с помощью ControllerTestCase

Например, в моем файле AppController.php У меня есть следующие:

public $components = array('Auth' => array(
     'authenticate' => array(
       'Form' => array(
         'fields' => array('username' => 'email') 
       ) 
     ) 
), 'Session', 'DebugKit.Toolbar'); 

Если я иду к контроллеру в вопросе и использовать следующую строку кода в действии debug($this->components); я получаю следующий результат:

array(
     'Auth' => array(
       'authenticate' => array(
         'Form' => array(
           'fields' => array(
             'username' => 'email' 
           ) 
         ) 
       ) 
     ), 
     (int) 0 => 'Session', 
     (int) 1 => 'DebugKit.Toolbar' 
) 

Тем не менее, во время проверки блока ту же строку кода будет выводить следующее:

array(
     (int) 0 => 'Session' 
) 

В контроллере нет компонентов, поэтому там нет ничего, что может вызвать проблему, но не уверен, что проблема здесь или как ее решить.

+0

Где находится ваш файл AppController.php? Если вы проверите 'get_included_files()' во время тестирования, это, вероятно, не ваш контроллер приложения, который загружен. – AD7six

+1

CakePHP/Cake/Test/test_app/Controller/AppController.php загружается в отличие от моего AppController. Нечетный –

+0

Вы установили CakePHP, используя композитор и грушу? Вы загружаете файл autoload.php композитора? – AD7six

ответ

1

Я не испекла свои контроллеры приложений, поэтому мне не хватало некоторых строк кода. Чтобы обеспечить загрузку нужного AppController, в верхней части контроллера требуется следующая строка кода.

App::uses('AppController', 'Controller'); 

Добавление этой линии обеспечивает загрузчик классов знает, чтобы загрузить AppController, в то время как приложение будет работать без него, это лучшая практика, чтобы включить его.

+0

Это было решение, которое я дал в канале #cakephp на freenode - не помню точного объяснения, но это было похоже на то, чтобы убедиться, что загрузчик классов знает, какой AppController загружать. Мне это не кажется интуитивным, и я был бы счастлив, если бы кто-то смог найти лучшее решение, чем это. –

+0

На самом деле вопрос, который я задаю здесь сейчас, неверен. Фактическая проблема заключается в том, почему CakePHP не использует мой AppController при тестировании. Должен ли я открывать новый вопрос на основе этого или редактировать мои оригинальные вопросы? –

+0

Он сделал. Правильный (т. Е. Тот, который входит в мое приложение) AppController вызывается теперь, когда я включаю эту строку кода в проверяемый контроллер. Я согласен, что это не похоже на правильное решение, поскольку само приложение работает с этой строкой кода - это необходимо только для того, чтобы во время модульного тестирования был загружен правильный AppController. –