Gdzie mogę znaleźć dokumentację dla klas fabrycznych WP_UnitTestCase?

21

W najnowszych wersjach WP_UnitTestCasema $factorywłaściwość.

Na przykład:

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

Gdzie mogę znaleźć dokumentację dotyczącą tej przydatnej funkcji?

djb
źródło

Odpowiedzi:

26

O ile mi wiadomo, obecnie nie ma na to dokumentacji. Oficjalnym źródłem jest tutaj .

Napisałem również samouczek na temat testowania jednostkowego wtyczek WordPress, który zawiera szczegółowe informacje na temat tej funkcji .

Jedną z zalet korzystania z niego WP_UnitTestCasesą jego fabryki. Można do nich uzyskać dostęp poprzez factoryzmienną członka. factoryPrzedmiotem o właściwościach, które każdorazowo oznaczają przypadek jednej z klas określonej w obejmuje / factory.php . Co oni robią, pytasz? Ułatwiają tworzenie użytkowników, postów, warunków itp., Gdziekolwiek ich potrzebujesz w teście. Zamiast tego:

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

Możesz po prostu to zrobić:

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

Ale czekaj, robi się jeszcze lepiej. Co zrobić, jeśli potrzebujesz wielu użytkowników (lub postów itp.)? Możesz po prostu utworzyć je zbiorczo w następujący sposób:

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

Spowoduje to utworzenie 25 użytkowników, których możesz użyć w teście.

factoryMa następujące właściwości, które można użyć:

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

Wszystkie mogą być używane w taki sam sposób, jak pokazano w powyższym przykładzie z $userfabryką. Na przykład możesz utworzyć taki post:

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

Możesz także określić konkretne argumenty, które będą używane do tworzenia obiektu. W powyższym przykładzie utworzyliśmy post, ale nie został on przypisany do konkretnego użytkownika ( post_authorpole będzie domyślnie ustawione na 0). Czasami zamiast tego możemy chcieć przypisać post do użytkownika. Zrobilibyśmy to w ten sposób:

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

Ponadto, jeśli potrzebujesz czegoś więcej niż tylko identyfikator tworzonego obiektu, nie musisz tego robić:

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

Zamiast tego użyj create_and_get()metody:

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

W tym przykładzie wykorzystaliśmy postfabrykę, ale to samo dotyczy wszystkich fabryk.

Myślę, że wspomnę o tym zespołowi dokumentów WordPress. Może uda nam się wprowadzić te rzeczy do wtyczek i podręczników tematycznych.

Aktualizacja (20 czerwca 2015 r.): Możesz także tworzyć własne niestandardowe fabryki !

Aktualizacja (27 września 2016 r.): W WordPress 4.4 testy zostały zaktualizowane, aby zapewnić statyczną factory()metodę dostępu do fabryk, chociaż factorywłaściwość jest nadal udostępniana za pośrednictwem magicznego narzędzia pobierającego.

JD
źródło
Domena jest martwa, podobnie jak link do samouczka. Czy został przeniesiony?
Josh Habdas
@JoshH Wygląda na to, że jest teraz z powrotem. Prawdopodobnie trafiłeś go, gdy witryna wykonywała kopię zapasową w środku nocy (moja strefa czasowa).
JD
@JoshH Nie znam żadnych platform testowania jednostkowego, które używają kodu proceduralnego do testów. Naprawdę wątpię, aby struktura testowania procedur i tak działała prawie tak dobrze, jak OO, tylko ze względu na to, jak musi działać. Jednak tylko dlatego, że testy są zbudowane na obiektowej strukturze, takiej jak PHPUnit, nie narzuca, że ​​mogą testować tylko kod OO. Mam wiele kodów procedur do wtyczek i testuję je dokładnie w ten sam sposób. WordPress testuje także wiele kodów proceduralnych w ten sposób. Więc nie powinno być problemu.
JD
Dzięki @JD Idealnie chciałbym też napisać moje testy w ten sposób. Ale prześlę się do OOP, ponieważ nie ma go w głównym kodzie. PS Próbowałem przesłać komentarz na Twoim blogu i otrzymałem błąd. bezczelna twarz Niezależnie, dzięki za 411.
Josh Habdas
1
@JoshH Dzięki za informacje na temat problemu z komentarzami, należy to teraz naprawić. Przyczyną była nadgorliwa wtyczka antyspamowa.
JD
2

Kod źródłowy w

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

wydaje się być najlepszym miejscem do obejrzenia w tej chwili

djb
źródło
2
Wystarczy usunąć link z pytania: Co byś przeczytał? Proszę zawsze pisać odpowiedzi, które nie są oparte na źródłach zewnętrznych. W przeciwnym razie musimy usunąć twoją odpowiedź.
kaiser
2
@kaiser, widzę, skąd pochodzisz, ale odpowiedź na moje pytanie będzie linkiem. Na pewno nie spodziewałbyś się, że ktoś opublikuje tutaj całą dokumentację?
djb
2
Tak, spodziewalibyśmy się, że ktoś opublikuje tutaj cały odpowiedni kod. Jest to nawet zapisane w często zadawanych pytaniach dotyczących witryny - „Zawsze podawaj najistotniejszą część ważnego linku, na wypadek gdyby strona docelowa była nieosiągalna lub pozostała na stałe offline”. Może to nie być cała zawartość połączonego zasobu, ale w tym przypadku może tak być. Ponieważ ten zasób GitHub staje się niedostępny, odpowiedź staje się bez znaczenia.
s_ha_dum