Функция testAction () возвращает значение null для debug () в тесте CakePhp

Я пытался узнать, как использовать модульное тестирование в CakePhp, я пытаюсь написать контрольный тест. Я читал о функции testAction () и debug (), но для меня это не работает, я имею в виду, что метод тестирования проходит, но debug () возвращает null (потому что testAction делает)

Это мой код:

<?php App::uses('Controller', 'Controller'); App::uses('View', 'View'); App::uses('PostsController', 'Controller'); class PostsControllerTest extends ControllerTestCase { public function setUp() { parent::setUp(); $Controller = new Controller(); $View = new View($Controller); $this->Posts = new PostsController($View); } public function testIndex() { $result = $this->testAction('Posts/Index'); debug($result); } } 

Сообщения / индексный контроллер возвращает список всех сообщений, хранящихся в БД.

Solutions Collecting From Web of "Функция testAction () возвращает значение null для debug () в тесте CakePhp"

Я предполагаю, что вы используете CakePHP 2.

$this->testAction() может возвращать несколько разных результатов, в зависимости от параметров, которые вы ему даете.

Например, если вы установите параметр return в vars , метод testAction() вернет массив варов, которые были установлены в тестируемом действии:

 public function testIndex() { $result = $this->testAction('/posts/index', array('return' => 'vars')); debug($result); } 

В этом примере данные отладки должны быть массивом варов, которые вы установили в действии /posts/index .

Документация CakePHP описывает возможные результаты, которые вы можете вернуть здесь: http://book.cakephp.org/2.0/en/development/testing.html#choosing-the-return-type

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

Ответ mtnorthrop действительно сработал для меня, но только однажды я также имел дело с авторизацией моего сайта. Если ваш сайт использует авторизацию, то testAction ('/ action', array ('return' => 'contents') вернет null. Я видел несколько решений для этого:

Один из них заключается в том, чтобы следовать приведенному здесь решению: CakePHP Unit Test не возвращает содержимое или View, где вы проверяете AppController :: beforeFilter (), находитесь ли вы в режиме отладки и если да, всегда проверяйте подлинность пользователя:

 // For Mock Objects and Debug >= 2 allow all (this is for PHPUnit Tests) if(preg_match('/Mock_/',get_class($this)) && Configure::read('debug') >= 2){ $this->Auth->allow(); } 

Другим является следовать рекомендациям, приведенным в этом обсуждении: https://groups.google.com/forum/#!topic/cake-php/eWCO2bf5t98 и высмеять объект Auth с помощью функции генерации ControllerTestCase:

 class MyControllerTest extends ControllerTestCase { public function setUp() { parent::setUp(); $this->controller = $this->generate('My', array('components' => array( 'Auth' => array('isAuthorized') )) ); $this->controller->Auth->expects($this->any()) ->method('isAuthorized') ->will($this->returnValue(true)); } } 

Примечание (я использую CakePhp 2.3.8)