xem xét mã này:CakePHP điều khiển thử nghiệm với các thành phần an ninh
điều khiển Mã
<?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);
}
}
}
Xem mã
<?php
echo $this->Form->create();
echo $this->Form->input('name');
echo $this->Form->end('Submit');
Kể từ khi tôi có thành phần an ninh tại chỗ, giả mạo với biểu mẫu theo bất kỳ cách nào (chẳng hạn như thêm một trường vào nó) sẽ khiến yêu cầu trở thành đen-h oled. Tôi muốn thử nghiệm này:
Kiểm tra Mã
<?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']);
}
}
Các thử nghiệm thứ hai testExamplePostInvalidData
nên thất bại vì some_field
là trong mảng $data
, nhưng nó đi! Tôi đang làm gì sai?
Câu trả lời này khiến tôi nghĩ đến khả năng chỉ kiểm tra xem khung nhìn trả về GET và xem nó có chứa các trường không thể chỉnh sửa được không. Sau đó, khi biết rằng thành phần Bảo mật được bật, tôi biết rằng tôi an toàn. Nhưng tôi nghĩ rằng thử nghiệm của tôi vẫn có ý nghĩa bởi vì các thử nghiệm không quan tâm đến việc triển khai của bạn là gì; kiểm tra chỉ quan tâm đến kết quả. Vì vậy, kết quả của việc đăng các trường không nên chỉnh sửa sẽ dẫn đến lỗi, dù được tạo ra từ thành phần Bảo mật hay không (thử nghiệm không quan tâm). Nhưng tôi nghĩ rằng câu trả lời này đủ. Cảm ơn bạn! – Nick