Considerate questo codice:CakePHP Test controller con il componente di protezione
Codice controller
<?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);
}
}
}
Visualizza codice
<?php
echo $this->Form->create();
echo $this->Form->input('name');
echo $this->Form->end('Submit');
Dal momento che ho il componente di protezione in atto, manomissione con il modulo in qualsiasi modo (come aggiungere un campo ad esso) causerà la richiesta di essere nero-h oled. Mi piacerebbe provare questo:
test Codice
<?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']);
}
}
La seconda prova testExamplePostInvalidData
dovrebbe fallire a causa di some_field
essere nella matrice $data
, ma passa! Che cosa sto facendo di sbagliato?
Questa risposta mi ha fatto pensare di la possibilità di controllare semplicemente che cosa ritorna la vista su un GET e vedere se contiene campi che non dovrebbero essere modificabili. Quindi, sapendo che il componente Sicurezza è abilitato, so che sono al sicuro. Ma penso che il mio test abbia ancora senso perché ai test non interessa quale sia la tua implementazione; i test si preoccupano solo del risultato. Quindi il risultato della pubblicazione di campi che non dovrebbero essere modificabili dovrebbe comportare un errore, generato o meno dal componente Security (il test non interessa). Ma penso che questa risposta sia sufficiente. Grazie! – Nick