Wo finde ich Dokumentation für die WP_UnitTestCase-Factory-Klassen?

21

In neueren Versionen WP_UnitTestCasewurde eine $factoryEigenschaft aufgenommen.

Beispielsweise:

$post = $this->factory->post->create();

Wo finde ich Dokumentation zu dieser nützlichen Funktion?

djb
quelle

Antworten:

26

Soweit ich weiß, gibt es derzeit keine Dokumentation dafür. Die offizielle Quelle ist hier .

Ich habe auch ein Tutorial zum Testen von WordPress-Plugins geschrieben, das einige Details zu dieser Funktion enthält .

Einer der Vorteile der Nutzung WP_UnitTestCasesind die Fabriken. Auf diese kann über die factoryMitgliedsvariable zugegriffen werden. Das factoryist ein Objekt mit Eigenschaften, die jeweils eine Instanz einer der in includes / factory.php definierten Klassen sind . Was machen sie, fragst du? Sie machen es sehr einfach, Benutzer, Beiträge, Begriffe usw. zu erstellen, wo immer Sie sie in Ihrem Test benötigen. Also, anstatt dies zu tun:

$args = array( /* A bunch of user data you had to make up */ );
wp_insert_user( $args );

Sie können dies einfach tun:

$user_id = $this->factory->user->create();

Aber warte, es wird noch besser. Was ist, wenn Sie viele Benutzer (oder Beiträge oder was auch immer) benötigen ? Sie können sie einfach in loser Schüttung wie folgt erstellen:

$user_ids = $this->factory->user->create_many( 25 );

Dadurch werden 25 Benutzer erstellt, die Sie in Ihrem Test verwenden können.

Das factoryhat die folgenden Eigenschaften, die Sie verwenden können:

  • $post
  • $attachment
  • $comment
  • $user
  • $term
  • $category
  • $tag
  • $blog

Sie können alle auf die gleiche Weise verwendet werden, wie im obigen Beispiel im $userWerk gezeigt. Beispielsweise können Sie einen Beitrag wie folgt erstellen:

$this->factory->post->create();

Sie können auch bestimmte Argumente angeben, die zum Erstellen des Objekts verwendet werden sollen. Im obigen Beispiel haben wir einen Beitrag erstellt, der jedoch keinem bestimmten Benutzer zugewiesen wurde (das post_authorFeld wird standardmäßig verwendet 0). Manchmal möchten wir den Beitrag stattdessen einem Benutzer zuweisen. Wir würden das so machen:

$user_id = $this->factory->user->create();
$post_id = $this->factory->post->create( array( 'post_author' => $user_id ) );

Wenn Sie mehr als nur die ID des Objekts benötigen, das Sie erstellen, müssen Sie dies auch nicht tun:

$post_id = $this->factory->post->create();
$post = get_post( $post_id );

Verwenden Sie stattdessen die create_and_get()Methode:

// $post will be an instance of WP_Post 
$post = $this->factory->post->create_and_get();

In diesem Beispiel haben wir die postFabrik benutzt, aber das gleiche gilt für alle Fabriken.

Ich denke, ich werde dies dem WordPress-Docs-Team mitteilen. Vielleicht können wir dieses Zeug in die Plugin- und Themenhandbücher aufnehmen.

Update (20. Juni 2015): Sie können auch Ihre eigenen benutzerdefinierten Fabriken erstellen !

Update (27. September 2016): In WordPress 4.4 wurden die Tests aktualisiert, um eine statische factory()Methode für den Zugriff auf die Fabriken bereitzustellen , obwohl die factoryEigenschaft weiterhin über einen Magic Getter bereitgestellt wird.

JD
quelle
Domain ist tot, ebenso wie der Link zum Tutorial. Wurde es bewegt?
Josh Habdas
@JoshH Es scheint jetzt wieder aktiv zu sein. Sie haben es wahrscheinlich getroffen, während die Site mitten in der Nacht ein Backup ausführte (meine Zeitzone).
JD
@ JoshH Ich kenne keine Unit-Test-Frameworks, die für die Tests prozeduralen Code verwenden. Ich bezweifle wirklich, dass ein prozedurales Test-Framework sowieso fast so gut funktionieren würde wie ein OO-Framework, nur weil es so funktionieren muss. Nur weil die Tests auf einem objektorientierten Framework wie PHPUnit basieren, bedeutet dies jedoch nicht, dass sie nur OO-Code testen können. Ich habe viele prozedurale Codes für meine Plugins und teste sie genauso. WordPress testet auf diese Weise auch viele prozedurale Codes. Es sollte also kein Problem sein.
JD
Danke @JD Ich würde meine Tests im Idealfall auch so schreiben. Aber ich werde mich bei OOP melden, da es nicht in der Hauptcodeline enthalten ist. PS Ich habe versucht, einen Kommentar in Ihrem Blog einzureichen, und einen Fehler erhalten. Schielendes Gesicht Egal, danke für den 411.
Josh Habdas
1
@JoshH Danke für den Hinweis auf das Problem mit den Kommentaren, dies sollte jetzt behoben sein. Es wurde durch ein übereifriges Anti-Spam-Plugin verursacht.
JD
2

Der Quellcode bei

https://github.com/rnagle/wordpress-unit-tests/blob/master/includes/factory.php

scheint der beste Ort zu sein, um im Moment zu schauen

djb
quelle
2
Entfernen Sie einfach den Link von Ihrer Frage: Was würden Sie dann lesen? Bitte schreiben Sie immer Antworten, die sich nicht auf externe Quellen stützen. Anderenfalls müssen wir Ihre Antwort löschen.
Kaiser
2
@kaiser, ich sehe, woher du kommst, aber die Antwort auf meine Frage wird ein Link sein. Sicherlich würden Sie nicht erwarten, dass jemand die gesamte Dokumentation hier veröffentlicht?
DJB
2
Ja, wir würden erwarten, dass jemand den gesamten relevanten Code hier veröffentlicht. Dies steht sogar in den häufig gestellten Fragen ( FAQ) der Website : "Geben Sie immer den relevantesten Teil eines wichtigen Links an, falls die Zielsite nicht erreichbar ist oder dauerhaft offline geschaltet wird." Das kann nicht der gesamte Inhalt der verlinkten Ressource sein, aber in diesem Fall kann es sein. Wenn auf diese GitHub-Ressource nicht mehr zugegriffen werden kann, ist diese Antwort bedeutungslos.
s_ha_dum