Avendo alcuni problemi con PHPUnit per testare i miei controller.
codice su cui stavo lavorando finora è stata implementando $_POST
o di altre variabili di richiesta:
$_SERVER['REQUEST_METHOD'] = 'POST';
$_POST = array(
'test' => true
);
La maggior parte dei test ha funzionato perfettamente in questo modo fino a quando mi imbatto in metodi che accettano impieghi di filter_input_array
funzione:
$_SERVER['REQUEST_METHOD'] = 'POST';
$_REQUEST = $_POST = $GLOBALS['_POST'] = array(
'test' => true
);
// ....
var_dump(filter_input_array(INPUT_POST));
NULL
Non sono disposto a rimuovere le funzioni filter_input
da codice non mio, ma non riesco a farle funzionare nei test.
Versionings:
PHP 5.5.9-1ubuntu4.9 (CLI) (costruiti 17 aprile 2015 11:44:57)
Apache/2.4.7 (Ubuntu)
PHPUnit 4.6.6 by Sebastian Bergmann e collaboratori.
Qualsiasi aiuto sarà apprezzato.
EDIT 2015.05.11
Impostazione $_SERVER
con CONTENT_LENGTH
e CONTENT_TYPE
non risolve il problema. La mia versione di PHP non mi permette di scrivere su php://stdin
come descritto in PHP 5.6.0 chagelog (o come ho capito io), ma il file_put_contents(STDIN,..)
riesce ma non funziona comunque.
Poiché si tratta di un test PHPUnit, forse c'è qualche tipo di annotazione o phpunit.xml
entrata non lo so ancora, che potrebbe risolvere il problema in maniera php-cgi POST setting.
I suoi due esempi assegnano '$ _POST' in modo diverso. Quali sono i valori delle tre variabili '$ _REQUEST',' $ _POST' e '$ GLOBALS ['_ POST']' * prima * si fa '$ _REQUEST = $ _POST = $ GLOBALS ['_ POST']'? –
I loro array vuoti. Poiché si tratta di un test phpunit, viene eseguito in linea di comando (php-cli), quindi non funziona nemmeno sul server web e non devono essere impostati i varsetti '$ _REQUEST'. Stavo guardando i test unitari del php stesso, come testano 'filter_input_array' ma non mi ha aiutato affatto. – yergo
dai un'occhiata a http://stackoverflow.com/questions/5655284/how-to-pass-parameters-from-command-line-to-post-in-php-script può essere d'aiuto? – exussum