为扩展另一个 class 的 class 编写 PHPUnit 测试会产生 'Class not found' 错误
Writing PHPUnit test for a class which extends another class produces a 'Class not found' error
我有:
WPKit/Module/AbstractFunctions.php
摘要Class;
wp-content/themes/mytheme/modules/quiz/Functions.php
:
use WPKit\Module\AbstractFunctions;
class Functions extends AbstractFunctions { ... }
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:
我有:
WPKit/Module/AbstractFunctions.php
摘要Class;wp-content/themes/mytheme/modules/quiz/Functions.php
:use WPKit\Module\AbstractFunctions; class Functions extends AbstractFunctions { ... }
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: