Как я могу проверить на WP_Error? - PullRequest
0 голосов
/ 16 ноября 2018

Я пишу тесты, используя phpunit и WP_Mock для плагина WordPress, и я хочу вернуть WP_Error, если метод в моем классе вызывается неправильно (получая все необходимые ему аргументы).

Конечно, стандартный способ сделать это - создать и вернуть новый WP_Error в этот момент - но поскольку WordPress не загружается, когда я запускаю тесты, класс WP_Error не существует.

Другие классы WordPress высмеиваются и вводятся с помощью Mockery, но это похоже на излишество, чтобы проверить, что WP_Error выбрасывается;но я не вижу никакого другого разумного плана на полпути.

Есть ли хороший способ высмеять WP_Error?

Ответы [ 3 ]

0 голосов
/ 25 ноября 2018

Метод 1:

Выполните свои тесты после действия plugins_loaded, например:

add_action('plugins_loaded', 'your_func');
function your_func()
{
   ...
}

Метод 2:

Включите один раз класс WP_error:

include_once(ABSPATH.'wp-includes/class-wp-error.php');
...
your code
0 голосов
/ 10 апреля 2019

Изучив ответ Т. Тодуа, мой composer.json выглядит следующим образом:

{
    "require-dev": {
        "cyruscollier/wordpress-develop": "dev-master",
        "10up/wp_mock": "0.4.2",
        "dealerdirect/phpcodesniffer-composer-installer": "*",
        "wp-coding-standards/wpcs": "1.*"
    }
}

, а в моем методе tests/UnitTest.php setUp() у меня есть:

$basedir = dirname( dirname( __FILE__ ) );

require_once( $basedir . '/vendor/wordpress/wp-includes/class-wp-error.php' );
0 голосов
/ 22 ноября 2018

Самый простой способ: Просто include_once файл с определением для WP_Error ( wp-includes / class-wp-error.php ) при загрузке ваших тестов. Таким образом, класс будет определен, когда вам нужно создать экземпляр класса.

WP_Error не имеет никаких других зависимостей, поэтому включение должно быть серьезным.

Вы не проверяете фактическое поведение класса, а возвращается только объект этого класса. Так что нет нужды издеваться, если существует правильное определение.

Лучше: Используйте WP-CLI для строительных лесов. При этом у вас будет доступ к функциям и классам WordPress.

Вам нужно будет установить WP-CLI и иметь работающую установку WP с вашими файлами плагинов.

Сначала вам нужно создать леса плагинов. В вашей директории WP запустите

wp scaffold plugin-tests your-plugin

Это создаст набор файлов в каталоге плагинов, подобный следующему:

|-bin/
|----install-wp-tests.sh
|-tests/
|----bootstrap.php
|----test-sample.php
|-.travis.yml
|-phpcs.xml.dist
|-phpunit.xml.dist
|-your-plugin.php

Вам потребуется cd в каталог вашего плагина и оттуда запустить инициализацию тестовой среды:

bin/install-wp-tests.sh db_name db_user 'db_password' db_host wp_version

Параметры говорят сами за себя. wp_version может быть latest. На этой базе данных wp-cli создаст набор таблиц для тестирования и создаст установку WP в вашем каталоге / tmp, настроенную с указанными выше значениями, которые будут использоваться при каждом запуске phpunit.

После этого достаточно просто позвонить phpunit и запустить свои тесты. Вы можете использовать test-sample.php в качестве отправной точки или скопировать туда свою.

При выполнении ваших тестов таким образом, будет определено WP_Error, и вы можете легко проверить, что ваши методы возвращают его правильно.

Счастливого тестирования!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...