Я пытаюсь автоматизировать свое тестирование. В качестве дымового теста я хотел бы проверить свой PHP-код с PHPMD, прежде чем продолжить работу с реальными модульными тестами. Звучит достаточно разумно, верно?
Дело в том, что PHPMD, кажется, падает, когда в моих PHP-файлах возникают фатальные ошибки. Для теста я добавил дополнительную оценку в определении функции, например, так:
function foo() {{
// Stuff
}
Я ожидал 1
код выхода, PHPMD, кажется, полностью падает, и вместо этого возвращает 0
код выхода Рендеринг моего автоматизированного скрипта бесполезен. Есть ли способ подавить эти ошибки и вернуть ожидаемый код выхода? Для PHPUnit --process-isolation
Вариант решил эту проблему, но я не могу найти такой вариант для PHPMD.
Соответствующий код автоматизированного тестирования
#!/usr/bin/php
<?php
exec('meta/phpmd', $output, $returnCode);
if ($returnCode == 1) {
echo '[Fail] PHP code is breaking', PHP_EOL;
exit(1);
} elseif ($returnCode == 2) {
echo '[Warn] PHP code is unclean', PHP_EOL;
} else {
echo '[OK] Code is clean! ', PHP_EOL;
}
В качестве обходного пути (и возможного решения) можно проверить синтаксис перед передачей его в PHPMD. Я изменил свой тестовый код на это:
#!/usr/bin/php
<?php
$dir_root = dirname(dirname(__DIR__));
$dir_php = $dir_root . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR . 'App';
exec('find ' . $dir_php . ' -iname *.php | xargs -n1 php -l 2>/dev/null', $output, $returnCode);
if ($returnCode != 0) {
echo '[Fail] PHP contains syntax errors', PHP_EOL,
implode(PHP_EOL, $output), PHP_EOL;
exit($returnCode);
}
exec('meta/phpmd', $output, $returnCode);
if ($returnCode == 1) {
echo '[Fail] PHP code is breaking', PHP_EOL;
exit(1);
} elseif ($returnCode == 2) {
echo '[Warn] PHP code is unclean', PHP_EOL;
}
Кредиты Winglian в Reddit для массы php -l
код
https://www.reddit.com/r/PHP/comments/2t7mvc/lint_an_entire_directory_of_php_files_in_parallel/
Других решений пока нет …