Probleme mit PHPUnit, um meine Controller zu testen.
-Code ich arbeitete bisher wurde die Umsetzung $_POST
oder andere Anfrage Variablen:
$_SERVER['REQUEST_METHOD'] = 'POST';
$_POST = array(
'test' => true
);
Die meisten Tests funktionierte perfekt auf diese Weise, bis ich in die Methoden ausführen, die Verwendung von filter_input_array
Funktion übernehmen:
$_SERVER['REQUEST_METHOD'] = 'POST';
$_REQUEST = $_POST = $GLOBALS['_POST'] = array(
'test' => true
);
// ....
var_dump(filter_input_array(INPUT_POST));
NULL
Ich bin nicht bereit, filter_input
Funktionen aus nicht meins Code zu entfernen, aber ich bin nicht in der Lage, sie in Tests arbeiten zu lassen.
Versionings:
PHP 5.5.9-1ubuntu4.9 (cli) (gebaut: 17. April 2015 11.44.57)
Apache/2.4.7 (Ubuntu)
PHPUnit 4.6.6 durch Sebastian Bergmann und Mitwirkende.
Jede Hilfe wird geschätzt.
EDIT 2015.05.11
Einstellung $_SERVER
mit CONTENT_LENGTH
und CONTENT_TYPE
das Problem nicht beheben. Meine Version von PHP erlaubt mir nicht zu schreiben php://stdin
in der Weise in PHP 5.6.0 chagelog (oder wie ich es verstehe), aber file_put_contents(STDIN,..)
gelingen, aber funktioniert sowieso nicht.
Da es ein PHP-Test ist, gibt es vielleicht eine Art von Anmerkung oder phpunit.xml
Eintrag, den ich noch nicht kenne, der dieses Problem in php-cgi POST setting Weise beheben kann.
Ihre zwei Beispiele '$ _POST' anders zuweisen. Was sind die Werte der drei Variablen '$ _REQUEST',' $ _POST' und '$ GLOBALS ['_ POST']' * vor * Sie tun '$ _REQUEST = $ _POST = $ GLOBALS ['_ POST']'? –
Ihre leeren Arrays. Da es sich um einen PHP-Test handelt, läuft es in der Kommandozeile (php-cli), so dass es nicht einmal einen Webserver gibt und keine '$ _REQUEST'-bezogenen Variablen gesetzt werden sollten. Ich habe Unit-Tests von PHP selbst angeschaut, wie sie 'filter_input_array' testen, aber es hat mir überhaupt nicht geholfen. – yergo
werfen Sie einen Blick auf http://stackoverflow.com/questions/5655284/how-to-pass-parameters-from-command-line-to-post-in-php-script es kann helfen? – exussum