Я пытаюсь написать тест на изменения кода для плагина WordPress.
<?php
require_once('.\simpletest\autorun.php');
require_once('.\wp-content\plugins\appointment-booking\includes.php');
// The line above causes [No runnable test cases in...] problem.
// In my actual code, I have absolute path and I've made sure that the path is correct.
class test extends UnitTestCase
{
function test_pass()
{
$this->assertFalse(false);
}
}
?>
Пожалуйста, помогите мне понять, почему и как исправить.
Как указано в комментарии, второй require_once вызывает ошибку [Нет запускаемых тестовых примеров в …]
Например:
Bad TestSuite [test.php] with error [No runnable test cases in [test.php]]
Я ожидаю не видеть ошибку Bad TestSuite. Я ожидаю, что он сможет запустить тест, как он может это сделать, когда второй require_once закомментирован.
Я вижу эту проблему, описанную здесь: PHP — Simpletest — Как проверить "включены" классы, но я не понимаю проблему, или как исправить. Спасибо.
Так как я не мог получить этот вопрос из статуса «на удержании», и не мог найти способ ответить на вопрос. Вместо этого я пишу решение здесь.
get_home_path () из ответа Винсента помогло мне найти причину, поэтому я пометил его как ответ, хотя это не совсем технически. Когда я пытался использовать его в своем коде, я не мог — имя функции, ABSPATH и т. Д. Не были определены. Причина в том, что он не считался частью WordPress.
Дальнейший поиск найден https://stackoverflow.com/a/27514259/5885721
И отладка увидела, что файл WordPress, который я хотел включить, имел этот код
<?php if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
Поэтому, когда была запущена функция require, она остановила все, и никаких тестов не было найдено. Чтобы исправить, добавьте
require( dirname( __FILE__ ) . '/wp-blog-header.php' );
вместо второго require_once и ABSPATH будут установлены правильно, и я могу использовать WordPress API и код плагина и писать контрольные примеры.
Использовать абсолютный путь опасно. Ты можешь использовать :
require_once(get_home_path() .'wp-content\plugins\appointment-booking\includes.php');
(если вы находитесь в среде Windows)
Других решений пока нет …