Pregunta:
En versiones recientes, WP_UnitTestCase
ha incluido una propiedad $factory
.
Por ejemplo:
$post = $this->factory->post->create();
¿Dónde puedo encontrar documentación sobre esta útil función?
Respuesta:
Hasta donde yo sé, no hay documentación para ello en la actualidad. La fuente oficial está aquí .
También escribí un tutorial sobre pruebas unitarias de complementos de WordPress, que brinda algunos detalles sobre esta función .
Una de las ventajas de usar
WP_UnitTestCase
son sus fábricas. Se puede acceder a ellos a través de la variable miembro defactory
. Lafactory
es un objeto con propiedades que son cada una instancia de una de las clases definidas en includes / factory.php . ¿Qué hacen, preguntas? Hacen que sea muy sencillo crear 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 simplemente 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)? 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.
La
factory
tiene las siguientes propiedades que puede utilizar:
$post
$attachment
$comment
$user
$term
$category
$tag
$blog
Todos pueden usarse de la misma manera que se demuestra en el ejemplo anterior con la fábrica
$user
. Por ejemplo, puede 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 campo
post_author
estará predeterminado en0
). A veces, es posible que deseemos que la publicación se asigne a un usuario. 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 el 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 método
create_and_get()
:// $post will be an instance of WP_Post $post = $this->factory->post->create_and_get();
En este ejemplo, usamos la fábrica de
post
, pero lo mismo es cierto para todas las fábricas.
Creo que le mencionaré esto al equipo de documentación de WordPress. Tal vez podamos incluir estas cosas en los manuales de complementos y temas.
Actualización (20 de junio de 2015): ¡ También puede crear sus propias fábricas personalizadas !
Actualización (27 de septiembre de 2016): en WordPress 4.4, las pruebas se actualizaron para proporcionar un método factory()
estático para acceder a las fábricas, aunque la propiedad de la factory
todavía se proporciona a través de un captador mágico.