Рассмотрим этот код:CakePHP Тестирование контроллера с компонентом безопасности
контроллера Код
<?php
App::uses('AppController', 'Controller');
class UsersController extends AppController {
public $components = array(
'Security',
'Session'
);
public function example() {
if ($this->request->is('post')) {
$this->set('some_var', true);
}
}
}
View Code
<?php
echo $this->Form->create();
echo $this->Form->input('name');
echo $this->Form->end('Submit');
Поскольку у меня есть компонент безопасности на месте, саботажа с формой каким-либо образом (например, добавление поля к ней) приведет к тому, что запрос будет черно-h ОСИД. Я хотел бы, чтобы проверить это:
Код проверки
<?php
class UsersControllerTest extends ControllerTestCase {
public function testExamplePostValidData() {
$this->Controller = $this->generate('Users', array(
'components' => array(
'Security'
)
));
$data = array(
'User' => array(
'name' => 'John Doe'
)
);
$this->testAction('/users/example', array('data' => $data, 'method' => 'post'));
$this->assertTrue($this->vars['some_var']);
}
public function testExamplePostInvalidData() {
$this->Controller = $this->generate('Users', array(
'components' => array(
'Security'
)
));
$data = array(
'User' => array(
'name' => 'John Doe',
'some_field' => 'The existence of this should cause the request to be black-holed.'
)
);
$this->testAction('/users/example', array('data' => $data, 'method' => 'post'));
$this->assertTrue($this->vars['some_var']);
}
}
Второй тест testExamplePostInvalidData
должен потерпеть неудачу из-some_field
, находящегося в $data
массиве, но она проходит! Что я делаю не так?
Этот ответ заставил меня думать возможность просто проверить, что представление возвращается в GET, и посмотреть, содержит ли он поля, которые не должны редактироваться. Затем, зная, что компонент безопасности включен, я знаю, что я в безопасности. Но я думаю, что мой тест по-прежнему имеет смысл, потому что тесты не волнуют, какова ваша реализация; тесты только заботятся об итогах. Таким образом, результат размещения полей, которые не должны редактироваться, должен приводить к ошибке, независимо от того, генерируется ли она из компонента безопасности или нет (тест не волнует). Но я думаю, что этого ответа достаточно. Спасибо! – Nick