Usando PHPUnit para probar las funciones de WordPress ($wpdb)

2 minutos de lectura

avatar de usuario
brucificar

Estoy escribiendo un tema de WordPress. Hay alguna clase de back-end que habla con la base de datos SQL a través de la variable $wpdb (“sql-connector.php”). En el tema de WordPress, alguna página incluiría esta página php y crearía un db_connector objeto, en el que podría usar global $wpdb de inmediato.

sql-connector.php:

<?php

class db_connector {

function verify_account($em, $pwd) {
    global $wpdb; 

    echo "em = ". $em;
    echo "pwd = ". $pwd; 

    $query = 
        "
        SELECT id
        FROM data_customers
        WHERE email = %s AND password = %s
        ";

    /* customer_id */               
    $result = $wpdb->get_var($wpdb->prepare($query, $em, $pwd));

    echo "empty? = ".!empty($result);

    return $result;
}

}?>

Ahora quiero usar PHPUnit para probar la función. verify_account($em, $pwd). Yo uso el código de abajo.

sql-connectorTest.php:

<?php

include("sql-connector.php");

class db_connectorTest extends PHPUnit_Framework_TestCase{
    private $db_connector;

    function testVerify_account() {
        $db_connector = new db_connector();

        $result = $db_connector->verify_account("username@email.com", md5("password"));

        $this->assertEmpty($result);
    }


}

?>

Al ejecutar PHPUnit, solo daría los siguientes resultados:

MacBruce:model bruce$ phpunit sql-connectorTest.php
PHPUnit 3.7.22 by Sebastian Bergmann.

em = username@email.compwd = 5f4dcc3b5aa765d61d8327deb882cf99MacBruce:model bruce$ 

Parece que se atascó cuando quiere usar el $wpdb->get_var(...) función. parece que el $wpdb esta vacio.

Soy muy nuevo en PHPUnit y WordPress. ¿Me olvidé de incluir alguna biblioteca de WordPress/PHPUnit? ¿O me perdí de incluir algunos de mis propios archivos php?

Gracias.

avatar de usuario
Takeshin

Necesita una conexión activa a la base de datos ($wpdb), instanciada con todas las credenciales, luego utilícela en su prueba. Intente evitar los globales, páselos en el constructor o en el setter.

Además, es posible que desee ver algunas herramientas de prueba de wordpress listas para usar como http://wptest.io/

Acabo de configurar PHPUnit & WP. El truco es que necesita su propia instalación de los archivos fuente de WordPress y su propia instancia de base de datos, pero luego puede configurar y desmantelar entornos de prueba.

Usé estas guías:

Una advertencia es que PHPUnit puede serializar $wpdb a menos que le diga que no lo hagay eso también arruinará su conexión db.

¿Ha sido útil esta solución?