为扩展另一个 class 的 class 编写 PHPUnit 测试会产生 'Class not found' 错误

Writing PHPUnit test for a class which extends another class produces a 'Class not found' error

我有:

  1. WPKit/Module/AbstractFunctions.php摘要Class;
  2. wp-content/themes/mytheme/modules/quiz/Functions.php:
    use WPKit\Module\AbstractFunctions;
    class Functions extends AbstractFunctions { ... }
    
  3. wp-content/themes/mytheme/tests/quiz/QuizFunctionsTest.php:

    require_once dirname(__FILE__) . "/../../modules/quiz/Functions.php";
    
    class QuizFunctionsTest extends TestCase {
        public function testGetQuizByID() {
            # some code
        }
    }
    

当运行 phpunit QuizFunctionsTest.php时,它给我以下错误:

PHP Fatal error: Class '%path%\AbstractFunctions' not found in %path%/modules/quiz/Functions.php on line 18

我尝试 require_once 丢失的 class 但没有帮助。在测试之外 class 我的代码工作正常。有什么想法吗?

TL;DR:看来我无法让它工作,因为它是一个 WordPress 设置,所以我所做的是通过 wget 安装 PHPUnit 并使用 WP-CLI 搭建脚手架主题测试,然后它就像一个魅力。


首先,我从主题目录中的终端安装了 PHPUnit:

wget -O phpunit https://phar.phpunit.de/phpunit-7.phar
chmod +x phpunit

接下来我安装了WP-CLI:

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

接下来设置测试套件:

wp scaffold theme-tests your-theme-slug

还要确保您已安装 svn

在我的例子中(我也发现有人提到了它)我不得不删除 /tmp/wordpress/tmp/wordpress-tests-lib 并重新 运行 之前的命令两次,因为脚本不知何故没有'下载所有内容。

请注意,您将在 /tmp/wordpress 中设置单独的 WordPress。在我的主要 WordPress 设置中,我使用存储在 wp-content 附近的 WordPress 根目录中的 WPKit 库,所以我必须将它复制到 /tmp/wordpress,否则我的 PHPUnit 测试找不到包含在 [= =60=] 我必须测试。

因此,当您 运行 wp scaffold 时,它会在您的主题根目录中创建 bin 目录。 运行 从您的主题根目录执行以下命令以安装测试套件:

bin/install-wp-tests.sh <test-database-name> <user> <password> <host> <wordpress-version>

在我的例子中它看起来像:

bin/install-wp-tests.sh wp_test root '' localhost latest

一定要使用数据库,因为运行ning PHPUnit每次都会清空数据库,所以你可能会丢失数据。

完成所有这些操作后 运行 PHPUnit,您应该没问题:

./phpunit

它 运行 在 your-theme/tests 目录中进行测试。默认情况下,它会忽略默认测试文件,因此请使用它来进行您自己的简单测试以检查一切是否正常。


Sources: