使用PHPUnit测试WordPress函数($ wpdb)

时间:2013-08-01 21:09:29

标签: wordpress unit-testing phpunit wpdb

我正在写一个WordPress主题。有一些后端类通过$ wpdb变量(“sql-connector.php”)与SQL数据库通信。在WordPress主题中,某些页面将包含此php页面并创建一个db_connector对象,我可以立即使用global $wpdb

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

}?>

现在我想使用PHPUnit来测试函数verify_account($em, $pwd)。我使用下面的代码。

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


}

?>

运行PHPUnit,它只会产生以下结果:

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

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

它似乎在想要使用$wpdb->get_var(...)函数时卡住了。似乎$wpdb是空的。

我是PHPUnit和WordPress的新手。我是否错过了包含任何WordPress / PHPUnit库?或者我错过了包含我自己的一些php文件?

谢谢。

2 个答案:

答案 0 :(得分:1)

您需要与数据库($ wpdb)建立活动连接,并使用所有凭据进行实例化, 然后在你的测试中使用它。尽量避免全局变量,在构造函数或setter中传递它。

此外,您可能希望查看一些准备好的wordpress测试工具,例如http://wptest.io/

答案 1 :(得分:0)

我刚刚设置了PHPUnit&amp; WP。诀窍在于它需要自己安装WordPress源文件和自己的数据库实例,但随后可以设置&amp;拆除测试环境。

我使用了这些指南:

一个警告是PHPUnit can serialise $wpdb unless you tell it not to,这也会弄乱你的数据库连接。