Verwenden von PHPUnit zum Testen von WordPress-Funktionen ($wpdb)

Lesezeit: 2 Minuten

Benutzer-Avatar
bruzifizieren

Ich schreibe ein WordPress-Theme. Es gibt eine Backend-Klasse, die über die $wpdb-Variable (“sql-connector.php”) mit der SQL-Datenbank kommuniziert. Im WordPress-Theme würde eine Seite diese PHP-Seite enthalten und eine erstellen db_connector Objekt, in dem ich gerade verwenden könnte global $wpdb sofort.

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;
}

}?>

Jetzt möchte ich PHPUnit verwenden, um die Funktion zu testen verify_account($em, $pwd). Ich verwende den folgenden Code.

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("[email protected]", md5("password"));

        $this->assertEmpty($result);
    }


}

?>

Beim Ausführen von PHPUnit würde es nur die folgenden Ergebnisse liefern:

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

em = [email protected] = 5f4dcc3b5aa765d61d8327deb882cf99MacBruce:model bruce$ 

Es scheint, dass es hängen geblieben ist, wenn es die verwenden möchte $wpdb->get_var(...) Funktion. Es scheint, dass die $wpdb ist leer.

Ich bin sehr neu bei PHPUnit und WordPress. Habe ich vergessen, irgendwelche WordPress/PHPUnit-Bibliotheken einzubinden? Oder habe ich es versäumt, einige meiner eigenen PHP-Dateien einzufügen?

Vielen Dank.

Benutzer-Avatar
nimmthin

Sie benötigen eine aktive Verbindung zur Datenbank ($wpdb), die mit allen Anmeldeinformationen instanziiert ist, und verwenden Sie sie dann in Ihrem Test. Versuchen Sie, Globals zu vermeiden, übergeben Sie sie im Konstruktor oder im Setter.

Vielleicht möchten Sie sich auch einige einsatzbereite WordPress-Testtools ansehen, wie z http://wptest.io/

Ich habe gerade PHPUnit & WP eingerichtet. Der Trick besteht darin, dass es eine eigene Installation der WordPress-Quelldateien und eine eigene Datenbankinstanz benötigt, aber dann Testumgebungen auf- und abbauen kann.

Ich habe diese Anleitungen verwendet:

Eine Warnung ist, dass PHPUnit kann $wpdb serialisieren, es sei denn, Sie sagen ihm, dass dies nicht der Fall sein sollund das wird auch Ihre db-Verbindung durcheinander bringen.

1200950cookie-checkVerwenden von PHPUnit zum Testen von WordPress-Funktionen ($wpdb)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy