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.
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:
- https://codesymphony.co/escritura-wordpress-plugin-unit-tests/
- https://engineering.hmn.md/guides/writing-code/writing-tests/
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.