Я хочу проверить действие добавления метода контроллера. Я хочу проверить результат действия сохранения. Поэтому в основном я хочу отправить сообщение в действие и проверить результат в своем тесте, используя find после завершения запроса. $ this-> testAction(), похоже, не подходит для этого (см. комментарии в коде ниже). Как это сделать?Тест контроллера блока CakePHP
код контроллера является что-то вроде:
Public function add() {
.....
if ($this->request->is('post') && isset($this->request->data['InvoiceEntry'])) {
....
$this->request->data = $this->__someMethod($this->request->data);
if ($this->Invoice->saveAssociated($this->request->data)) {
....
$this->redirect(array('action' => 'index'));
}
.....
}
код теста:
public function testAdd() {
$data = array('Invoice' => array(...), 'InvoiceEntry' => array(....));
// Method 1
$this->testAction('/invoices/add/', array(
'method' => 'post',
'data' => $data,
));
// Unable to do find after testAction because testAction basically is the test?
// Method 2:
$this->controller = $this->generate('Invoices');
$_SERVER['REQUEST_METHOD'] = 'POST';
$this->controller->requestAction('/invoices/add',array(
'data' => $data
));
// not working because requestAction() follows the redirect in the add method
}
Я не согласен с тем, что вы должны инициализировать модель в TestCase :: setUp(). Единственная причина, по которой это нормально, заключается в том, что вы будете использовать модель на 80% тестовых функций. В противном случае вы просто создадите объект, который вы в основном просто не используете. Это не плохая практика, а какая-то дурная привычка. – chadrien