Dove posso trovare la documentazione per le classi di fabbrica WP_UnitTestCase?


21

Nelle versioni recenti WP_UnitTestCaseha incluso una $factoryproprietà.

Per esempio:

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

Dove posso trovare la documentazione su questa utile funzione?

Risposte:


26

Per quanto ne so, al momento non è disponibile alcuna documentazione. La fonte ufficiale è qui .

Ho anche scritto un tutorial sui plugin WordPress per test unitari, che fornisce alcuni dettagli su questa funzione .

Uno dei vantaggi dell'utilizzo WP_UnitTestCasesono le sue fabbriche. È possibile accedervi tramite la factoryvariabile membro. Il factoryè un oggetto con proprietà che sono ciascuna un esempio di una delle classi definite in include / factory.php . Cosa fanno, chiedi? Rendono molto semplice la creazione di utenti, post, termini, ecc., Ovunque sia necessario nel test. Quindi, invece di fare questo:

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

Puoi fare solo questo:

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

Ma aspetta, diventa ancora meglio. Cosa succede se hai bisogno di molti utenti (o post o altro)? Puoi semplicemente crearli in blocco in questo modo:

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

Ciò creerà 25 utenti che è possibile utilizzare nel test.

L' factoryha le seguenti proprietà che è possibile utilizzare:

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

Possono essere usati tutti nello stesso modo come dimostrato nell'esempio sopra con la $userfabbrica. Ad esempio, puoi creare un post come questo:

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

È inoltre possibile specificare argomenti specifici da utilizzare per la creazione dell'oggetto. Nell'esempio sopra abbiamo creato un post, ma non è stato assegnato a un determinato utente (il post_authorcampo sarà impostato per impostazione predefinita 0). A volte potremmo invece voler assegnare il post a un utente. Lo faremmo così:

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

Inoltre, se hai bisogno di qualcosa di più del semplice ID dell'oggetto che stai creando, non devi farlo:

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

Utilizzare invece il create_and_get()metodo:

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

In questo esempio, abbiamo usato la postfabbrica, ma lo stesso vale per tutte le fabbriche.

Penso che parlerò di questo al team di docenti di WordPress. Forse possiamo ottenere questo materiale nei manuali dei plugin e dei temi.

Aggiornamento (20 giugno 2015): puoi anche creare le tue fabbriche personalizzate !

Aggiornamento (27 settembre 2016): in WordPress 4.4 i test sono stati aggiornati per fornire un factory()metodo statico per accedere alle fabbriche, sebbene la factoryproprietà sia ancora fornita tramite un getter magico.


Il dominio è morto, così come il collegamento al tutorial. È stato spostato?
Josh Habdas,

@JoshH Sembra essere tornato ora. Probabilmente l'hai colpito mentre il sito stava eseguendo un backup nel mezzo della notte (il mio fuso orario).
JD,

@JoshH Non conosco alcun framework di unit test che utilizza il codice procedurale per i test. Dubito davvero che un framework di test procedurali funzionerebbe quasi allo stesso modo di uno OO, proprio per come deve funzionare. Tuttavia, solo perché i test sono basati su un framework orientato agli oggetti come PHPUnit non impone che possano solo testare il codice OO. Ho un sacco di codice procedurale per i miei plugin e lo collaudo esattamente allo stesso modo. WordPress verifica anche molti codici procedurali in questo modo. Quindi non dovrebbe essere un problema.
JD,

Grazie @JD Preferirei anche scrivere i miei test in questo modo. Ma mi sottometterò a OOP dato che non è nella codeline principale. PS Ho provato a inviare un commento sul tuo blog e ho ricevuto un errore. faccia squinty Indipendentemente da ciò, grazie per la 411.
Josh Habdas

1
@JoshH Grazie per il testa a testa sul problema con i commenti, questo dovrebbe essere risolto ora. È stato causato da un plugin anti-spam troppo zelante.
JD

2

Il codice sorgente a

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

sembra essere il posto migliore per guardare il momento


2
Rimuovi semplicemente il link dalla tua domanda: cosa vorresti leggere? Scrivi sempre risposte che non si basano su fonti esterne. Altrimenti dovremo eliminare la tua risposta.
Kaiser

2
@kaiser, vedo da dove vieni, ma la risposta alla mia domanda sarà un link. Sicuramente non ti aspetteresti che qualcuno pubblichi qui l'intera documentazione?
DJ

2
Sì, ci aspetteremmo che qualcuno pubblichi qui tutto il codice rilevante . Questo è anche scritto nelle FAQ del sito - "Cita sempre la parte più rilevante di un link importante, nel caso in cui il sito di destinazione sia irraggiungibile o rimanga permanentemente offline." Potrebbe non essere l'intero contenuto della risorsa collegata, ma in questo caso potrebbe essere. Così com'è, quando quella risorsa GitHub diventa inaccessibile, questa risposta diventa insignificante.
s_ha_dum,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.