¿Dónde puedo encontrar documentación para las clases de fábrica WP_UnitTestCase?

21

En versiones recientes WP_UnitTestCaseha incluido una $factorypropiedad.

Por ejemplo:

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

¿Dónde puedo encontrar documentación sobre esta útil característica?

djb
fuente

Respuestas:

26

Hasta donde yo sé, no hay documentación para ello en este momento. La fuente oficial está aquí .

También he escrito un tutorial sobre la unidad que prueba los complementos de WordPress, que brinda algunos detalles sobre esta característica .

Una de las ventajas de usar WP_UnitTestCasees sus fábricas. Se puede acceder a estos a través de la factoryvariable miembro. El factoryes un objeto con propiedades que son cada una una instancia de una de las clases definidas en incluye / factory.php . ¿Qué hacen, preguntas? Facilitan la creación de usuarios, publicaciones, términos, etc., donde sea que los necesite en su prueba. Entonces, en lugar de hacer esto:

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

Puedes hacer esto:

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

Pero espera, esto se pone aún mejor. ¿Qué pasa si necesita muchos usuarios (o publicaciones, o lo que sea)? Simplemente puede crearlos a granel de esta manera:

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

Eso creará 25 usuarios que puede usar en su prueba.

El factorytiene las siguientes propiedades que se pueden utilizar:

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

Todos pueden usarse de la misma manera que se demostró en el ejemplo anterior con la $userfábrica. Por ejemplo, puedes crear una publicación como esta:

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

También puede especificar argumentos particulares para usar para crear el objeto. En el ejemplo anterior, creamos una publicación, pero no se asignó a un usuario en particular (el post_authorcampo estará predeterminado en 0). A veces podemos querer la publicación asignada a un usuario en su lugar. Lo haríamos así:

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

Además, si necesita algo más que la ID del objeto que está creando, no necesita hacer esto:

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

En su lugar, use el create_and_get()método:

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

En este ejemplo, utilizamos la postfábrica, pero lo mismo es cierto para todas las fábricas.

Creo que mencionaré esto al equipo de documentos de WordPress. Tal vez podamos incluir esto en los manuales de plugins y temas.

Actualización (20 de junio de 2015): ¡ También puedes crear tus propias fábricas personalizadas !

Actualización (27 de septiembre de 2016): en WordPress 4.4, las pruebas se actualizaron para proporcionar un factory()método estático para acceder a las fábricas, aunque la factorypropiedad aún se proporciona a través de un getter mágico.

JD
fuente
El dominio está muerto, y también el enlace al tutorial. ¿Ha sido movido?
Josh Habdas
@JoshH Parece estar de vuelta ahora. Probablemente lo golpeó mientras el sitio ejecutaba una copia de seguridad en medio de la noche (mi zona horaria).
JD
@ JoshH No conozco ningún marco de prueba de unidad que use código de procedimiento para las pruebas. Realmente dudo que un marco de prueba de procedimiento funcione casi tan bien como un OO de todos modos, solo por cómo debe funcionar. Sin embargo, el hecho de que las pruebas se construyan en un marco orientado a objetos como PHPUnit no dicta que solo puedan probar el código OO. Tengo muchos códigos de procedimiento de mis complementos y los pruebo exactamente de la misma manera. WordPress también prueba mucho código de procedimiento de esta manera. Entonces no debería ser un problema.
JD
Gracias @JD Idealmente me gustaría escribir mis pruebas de esta manera también. Pero lo enviaré a OOP dado que no está en la línea de código principal. PD: Intenté enviar un comentario en tu blog y recibí un error. Independientemente de la cara entrecerrada , gracias por el 411.
Josh Habdas
1
@JoshH Gracias por el aviso sobre el problema con los comentarios, esto debería solucionarse ahora. Fue causado por un plugin antispam excesivamente entusiasta.
JD
2

El código fuente en

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

parece ser el mejor lugar para mirar en este momento

djb
fuente
2
Simplemente elimine el enlace de su pregunta: ¿Qué leería que? Siempre escriba respuestas que no dependan de fuentes externas. De lo contrario, tendremos que eliminar tu respuesta.
kaiser
2
@kaiser, veo de dónde vienes, pero la respuesta a mi pregunta será un enlace. ¿Seguramente no esperarías que alguien publique toda la documentación aquí?
DJ
2
Sí, esperaríamos que alguien publique todo el código relevante aquí. Esto incluso está escrito en las preguntas frecuentes del sitio : "Siempre cite la parte más relevante de un enlace importante, en caso de que el sitio de destino no sea accesible o se desconecte permanentemente". Es posible que ese no sea el contenido completo del recurso vinculado, pero en este caso puede serlo. Como es, cuando ese recurso de GitHub se vuelve inaccesible, esta respuesta deja de tener sentido.
s_ha_dum