2015-03-16 3 views
0

Я пытаюсь проверить функцию контроллера ... Я хочу проверить пару вещей: A) Что он выдает исключение недопустимого запроса, когда используется определенный аргумент B) Что он правильно работает при правильном аргументе.Интеграционный тест CakePHP 3 без модели/объекта

Я написал несколько модульных тестов, и все они кажутся классными. Единственная документация, которую я могу найти на этом, - это http://book.cakephp.org/3.0/en/development/testing.html, но интеграционное тестирование, хотя и интересное и потенциально полезное, я не могу понять, как я предполагаю, что его можно реализовать без использования приспособлений (чего я не хочу делать обязательно) ,

namespace App\Test\TestCase\Controller; 
use Cake\ORM\TableRegistry; 
use Cake\TestSuite\IntegrationTestCase; 

class MusterControllerTest extends IntegrationTestCase 

{ 

public function testIn() 
{ 

    $this->in(); 
    $this->setExpectedException('Invalid request'); 
} 

}

class MusterController extends AppController { 

public $helpers = array('Address'); 

public function beforeFilter(Event $event) { 

    $this->Auth->allow('in'); 
     $this->layout = 'blank'; 
    $this->autoRender = false; 
    $this->loadComponent('Rule');  
    parent::beforeFilter($event); 
} 

public function in($param = null){ 

    if (!$this->request->is(array('post', 'put')) || $this->request->data('proc')!='yada' || is_null($param)){ 
     throw new NotFoundException(__('Invalid request')); 
    } 

    $this->processRequest($this->request->data('hit'), $this->request->data('proc'), $param); 

} 

Указатели оценены.

+0

Может быть, вы должны объяснить реальную проблему, которую вы столкнулись. Закрепление не потребуется, если вы не запросите таблицу. – ndm

ответ

1

Класс, как следует из его названия, предназначен для тестирования интеграции. То есть, он будет тестировать взаимодействие между контроллером и любым другим классом, который он использует для предоставления ответа.

Существует еще один способ управления тестированием, что более трудно сделать, но позволяет проверить методы контроллера в изоляции:

public function testMyControllerMethod() 
{ 
    $request = $this->getMock('Cake\Network\Request'); 
    $response = $this->getMock('Cake\Network\Response'); 
    $controller = new MyController($request, $response); 
    $controller->startupProcess(); 

    // Add some assertions and expectations here 
    // For example you could assing $controller->TableName to a mock class 

    // Call the method you want to test 
    $controller->myMethod('param1', 'param2'); 
}