Написание теста PHPUnit для класса, расширяющего другой класс, приводит к ошибке «Класс не найден» - PullRequest
0 голосов
/ 28 октября 2019

Что у меня есть:

  1. WPKit/Module/AbstractFunctions.php Абстрактный класс;
  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 отсутствующий класс, ноэто не помоглоЗа пределами тестового класса мой код работает просто отлично. Есть мысли?

1 Ответ

0 голосов
/ 30 октября 2019

TL; DR: Кажется, я не мог заставить его работать, потому что это была установка WordPress, поэтому я установил PHPUnit через wget и использовал 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 и повторно выполнить предыдущую команду дважды, потому что скрипт как-то не загружал все.

Обратите внимание, что у вас будет отдельная настройка WordPress в /tmp/wordpress. В моей основной настройке WordPress я использую библиотеку WPKit, которая хранится в корне WordPress около wp-content, поэтому мне пришлось скопировать ее в /tmp/wordpress, в противном случае мои тесты PHPUnit не смогли найти файлы WPKit, которые были включены в классы, которые я должен был проверить.

Поэтому, когда вы запускаете 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

Обязательно используйте empty database, потому что запуск PHPUnit очищает базу данных каждый раз, поэтому вы можете потерять ваши данные.

После всех этих действий просто запустите PHPUnit, и все будет в порядке:

./phpunit

Он запускает тесты вyour-theme/tests каталог. По умолчанию он игнорирует файл теста по умолчанию, поэтому используйте его для создания собственных простых тестов, чтобы проверить, все ли работает.

Whew.


Источники:


...