Когда модуль тестирует плагин, нужен ли плагин в каталоге wp-content / plugins теста WordPress?

В настоящее время я настраиваю модульное тестирование для своего плагина. В моих тестах / файле phpunit / bootstrap.php у меня есть:

require_once $wp_tests_dir . '/includes/functions.php'; tests_add_filter( 'muplugins_loaded', function() { require /can/this/be/anywhere/on/my/filesystem/myplugin/myplugin.php } ); // Start up the WP testing environment require_once $wp_tests_dir . '/includes/bootstrap.php'; 

Как вы можете видеть, мне muplugins_loaded основной файл моего плагина внутри функции, подключенной к muplugins_loaded перед запуском тестовой среды WP.

Мой вопрос

Должен ли myplugin / myplugin.php находиться в каталоге wp-content / plugins тестов WordPress или он может быть расположен где угодно в моей файловой системе?

Solutions Collecting From Web of "Когда модуль тестирует плагин, нужен ли плагин в каталоге wp-content / plugins теста WordPress?"

TL; DR

Это может быть где угодно в файловой системе.

(Но см. Обновление ниже для инструмента, который поможет вам сделать это еще более реалистично).

объяснение

Плагин может быть в любом месте файловой системы, в зависимости от того, имеет ли ваш плагин функцию установки и как вы хотите ее запустить.

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

То, как WordPress делает это, использует функцию activate_plugin() , которая вызовет крючок активации плагина, который был зарегистрирован с помощью register_activation_hook() .

Однако activate_plugin() проверяет, что плагин существует в папке wp-content/plugins , поэтому, если вы устанавливаете плагин таким образом, вам нужно будет иметь ваш плагин (или символическую ссылку на него) в каталоге плагинов.

Это боль, поэтому я обычно не использую activate_plugin() для установки плагина. Вместо этого я вызываю любую функцию, которую вы зарегистрировали, с помощью register_activation_hook() . Это может быть не идеальным, но я не испытывал никаких непредвиденных побочных эффектов.

Таким образом, у вас будет что-то вроде этого:

 tests_add_filter( 'muplugins_loaded', function() { require '/path/to/plugin/anywhere/on/filesystem/myplugin/myplugin.php' my_plugin_install_function(); } ); 

Конечно, если ваш плагин не имеет функции установки, этот момент является спорным, и вам, вероятно, не нужно беспокоиться об активации / установке плагина. Просто загрузите его из любой точки файловой системы, и ваши тесты должны работать нормально.

Тесты WebDriver

Обратите внимание, что может (возможно, должно ) наступить время, когда вы хотите запустить приемочные тесты для своего плагина. В зависимости от того, как вы решите это сделать, вам нужно будет активировать ваш плагин на сайте, который посещает браузер WebDriver.

WP Browser предлагает несколько вариантов для этого с помощью PHPUnit через Codeception. Ни один из вариантов, которые он предлагает в настоящее время, фактически загружает плагин на стороне тестирования в дополнение к стороне клиента / удаленного, поэтому сайт, используемый в тестах WebDriver, полностью отделен от того, который используется в модульных тестах. (Тем не менее, я в настоящее время работаю над гибридным подходом , который использует один и тот же сайт и загружает на стороне тестирования при выполнении тестов WebDriver.)

Обновление от 2016 года

Хотя все, что я сказал выше, по-прежнему верно, и загрузка плагина таким образом не вызвала никаких проблем, я недавно решил продолжить реалистичность загрузки и установки плагина во время модульных тестов. С этой целью я создал небольшую библиотеку под названием WPPPB или WordPress Plugin PHPUnit Bootstrap. При его использовании загрузка вашего плагина проста:

 $loader = WPPPB_Loader::instance(); $loader->add_plugin( 'my-plugin/my-plugin.php' ); $loader->load_wordpress(); 

Это обманчиво просто, поскольку за кулисами плагин активируется удаленно , до того, как WordPress загружен, чтобы он мог быть загружен WordPress точно так же, как обычно «в реальной жизни». Это требует наличия символической ссылки на плагин в папке плагинов, но в библиотеке есть скрипт, который автоматически установит для вас все. (Pro tip: WPPPB также включает в себя инструменты, которые помогут вам протестировать плагин un / installation очень реалистично).