Grundsätzlich bietet es eine einfache Möglichkeit, die verschiedenen Dinge zu tun, die in den anderen Antworten beschrieben wurden. Aus der Readme:
WP HTTP Testcase
PHPUnit-Testfall zum Testen von Code, der die WordPress- WP_Http
Klasse verwendet.
Wenn Sie wp_remote_request()
oder andere Wrapper für WP_Http
Methoden in Ihrem Code verwenden, ist das Testen schwierig, insbesondere wenn der Remote-Server von Ihrer Testumgebung aus möglicherweise nicht erreichbar ist. Dieser Testfall löst dieses Problem, indem Sie Ihre Anforderungen an eine andere Hostadresse weiterleiten, einen zwischengespeicherten Satz von Antworten verwenden oder die Remote-Antworten einfach verspotten, indem Sie künstliche Antworten bereitstellen.
Installation
Sie können dieses Paket mit Composer installieren:
composer require --dev jdgrimes/wp-http-testcase:~1.1
Verwendungszweck
Um es in Ihrem Code zu verwenden, müssen Sie zuerst die
wp-http-testcase.php
Datei in Ihre PHPUnit-Bootstrap-Datei aufnehmen. Wenn Sie die Host-Routing- und Antwort-Caching-Funktionen verwenden, müssen Sie WP_HTTP_TestCase::init()
Ihre Bootstrap-Datei aufrufen .
In Ihren Tests WP_Http
müssen Sie dann verlängern,
WP_HTTP_TestCase
anstatt WP_UnitTestCase
wie gewohnt.
Verspottende Antworten
Verwenden des Antwort-Caching
Wenn möglich, testen Sie am besten einen Scheinhost, um die Anforderungen zu bearbeiten. In einigen Fällen möchten oder müssen Sie die Anforderungen möglicherweise tatsächlich an den realen Server senden, und dies kann auch durchgeführt werden. Welche davon Sie tun, hängt von der Art der Anfragen ab und welche Nebenwirkungen sie auf den Empfängerhost haben.
Einrichten eines Testhosts
Wenn Sie beispielsweise ein Plugin testen, das Anforderungen an eine API stellt, die von einem anderen Plugin oder einer anderen Software bereitgestellt wird, möchten oder müssen Sie dies wahrscheinlich nicht auf einer Live-Site testen. Stattdessen können Sie eine Testsite einrichten oder einen lokalen Server verwenden, der Teil Ihrer Entwicklungsumgebung ist. Dort können Sie die Software installieren, die die Anfragen bearbeitet. Sobald dies erledigt ist, können Sie Ihre Tests für diese Test-Site wie folgt ausführen:
WP_HTTP_TC_HOST=localhost phpunit
Ersetzen Sie einfach durch localhost
den Hostnamen des lokalen Servers. Beachten Sie, dass die WP_HTTP_TC_*
Flags wie oben als PHP-Konstanten oder als Bash-Umgebungsvariablen definiert werden können. Letzteres hat Vorrang.
Caching aktivieren
Dies ist natürlich viel langsamer als die meisten anderen Komponententests, da die Anforderungen einige Zeit in Anspruch nehmen müssen. Hier kommt das Caching ins Spiel. Wenn das Caching aktiviert ist, wird die Antwort auf jede Anforderung beim ersten Ausführen zwischengespeichert, und die zwischengespeicherte Version wird in Zukunft verwendet. Dies bedeutet, dass Ihre Tests blitzschnell bleiben können.
Um das Caching zu aktivieren, fügen Sie dies einfach Ihrem Bootstrap hinzu:
define( 'WP_HTTP_TC_USE_CACHING', true );
Sie möchten wahrscheinlich auch das Verzeichnis angeben, in dem der Cache gespeichert werden soll WP_HTTP_TC_CACHE_DIR
. Sie können mehrere Cache-Gruppen verwenden und mit ihnen zwischen ihnen wechseln WP_HTTP_TC_CACHE_GROUP
.
Verwenden des Live-Hosts
Es gibt jedoch den zweiten Fall, in dem Sie keinen Testserver einrichten können. Ein Beispiel, in dem dies der Fall wäre, wäre, wenn Ihr Plugin Anforderungen an die von GitHub bereitgestellte API stellt. Abhängig von der Situation kann es möglich sein, die Anfragen tatsächlich an den "Live" -Empfänger zu richten. Das Hauptproblem ist wiederum, dass die Anforderungen dazu führen, dass die Tests lange dauern. Es besteht auch die Möglichkeit, dass auf die API in Ihrer Testumgebung nicht immer zugegriffen werden kann oder dass Ihre Tests die API zu stark belasten und Sie blockiert werden. Hier kann Ihnen das Caching helfen. Sie müssen Ihre Tests nur gelegentlich für die "Live" -API ausführen, und den Rest der Zeit können Sie mithilfe der zwischengespeicherten Antworten testen.
Künstliche Antworten liefern
Natürlich kann es vorkommen, dass es nicht möglich ist, einen Testserver zu erstellen, und es ist auch nicht möglich, ihn gegen den Live-Server auszuführen. In diesem Fall möchten Sie möglicherweise künstliche Antworten in Ihre Tests fest codieren. So können Sie das machen:
Bevor Sie den Code aufrufen, der die HTTP-Anforderung aufruft, müssen Sie die Funktion so einstellen, dass die Antworten wie folgt verspottet werden:
$this->http_responder = array( $this, 'mock_server_response' );
Der HTTP-Responderfunktion werden zwei Argumente übergeben, die Anforderungsargumente und die URL, für die die Anforderung bestimmt war.
protected function mock_server_response( $request, $url ) {
return array( 'body' => 'Test response.' );
}
Eine vollständige Liste der $request
Argumente und und der Antwort finden Sie unter
WP_Http::request()