Не могу проверить пакет PHP с помощью PHPUnit, как только я опубликую его

Я создал простую библиотеку PHP с использованием PHP 5.6.
Он включает в себя тестовые случаи PHPUnit, и мне удалось создать пакет.
Затем я обнаружил, что могу установить эти пакеты непосредственно из GitHub, используя composer, и в других проектах. Я могу запускать тесты самостоятельно на стадии разработки. Но после публикации пакета я не могу запустить тесты, так как он не находит файлы автозагрузчика должным образом.

<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/autoload.php"colors="true"processIsolation="false"stopOnFailure="false"syntaxCheck="false"convertErrorsToExceptions="true"convertNoticesToExceptions="true"convertWarningsToExceptions="true"testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader">

<testsuites>
<testsuite>
<directory>tests</directory>
</testsuite>
</testsuites>

Я добавил XML-файлы в корневой каталог. Путь к файлу автозагрузки является правильным, если он независим. Но структура каталогов после установки будет иной.

Проблема все еще сохраняется, если мы используем require_once файл автозагрузчика, так как структура каталогов изменяется после установки.

Вопросы:

  1. Можем ли мы протестировать наш пакет после его установки в какие-либо фреймворки (laravel / Symfony) или в другие проекты?
  2. Какова лучшая практика? Нужен ли тест разработчикам, использующим пакет?
  3. Если да, то какое решение для этого? Есть ли другой метод для автозагрузки проблемы в обеих средах?

Репо в Github

Скриншот

2

Решение

Я бы сказал, что лучше всего посмотреть на другие репозитории и посмотреть, работает ли он или нет.

Для меня

cd vendor/phpunit/phpunit && composer install && phpunit => работал
cd doctrine/collections/ && composer install && phpunit => работал

Так что, похоже, это должно работать на вас.

Если вы посмотрите на phpunit.xml.dist для других поставщиков они используют:

bootstrap="./tests/Doctrine/Tests/TestInit.php" (Доктрина)
bootstrap="tests/bootstrap.php" (PHPUnit)

Похоже, ваш файл не так уж отличается. Вы уверены, что бежали composer install из вашего каталога пакетов в папке поставщика?

Обновить:

Я добавил ваш репозиторий в качестве зависимости к установке Symfony по умолчанию.

"repositories": [
{
"url": "https://github.com/jerintk/Validator.git",
"type": "git"}
],

И в require блок:

"Jthedev/Validators": "dev-master"

Я тогда побежал

composer update

Все прошло нормально. Вам нужно запустить обновление composer и зарегистрировать новый composer.lock, потому что он устарел.

Оттуда я зашел в каталог для вашего репо.

cd vendor/Jthedev/Validators

Я тогда побежал

composer install

а также

vendor/phpunit/phpunit/phpunit

и получил

OK (2 tests, 2 assertions)

Обновление Два

(так как это было слишком долго для комментария)

@JTheDev composer update добавляет ваши зависимости для проекта laravel, но не создает папку vendor внутри вашего vendor/your-project каталог. Если composer установил все зависимости отдельно для каждого проекта, например:

vendor/
my-project/
vendor/
dependency-A
dependency-C
another-library/
vendor/
dependency-A
dependency-B

это будет тратить много места и пропускной способности. Вместо этого composer получает все зависимости и устанавливает их в отдельные папки, и они работают друг с другом, потому что composer загружает их все, используя vendor/autoload.php для этого проекта. То, о чем вы говорите, это создание папки поставщика внутри vendor/your-project, Это не нормально — обычно вам нужно только запускать тесты при разработке самостоятельно, но в любом случае ваш вопрос о том, как запускать тесты для вашего проекта, когда он добавляется как зависимость для другого проекта.

Для этого вам необходимость запустить композитор установить внутри vendor/your-project каталог, что означает:

cd vendor/Jthedev/Validators && composer install && vendor/phpunit/phpunit/phpunit

Окончательное обновление (надеюсь)

Из чата:

Автозагрузчик генерируется только когда вы запускаете composer install внутри вашего каталога проекта. Вы правы, папка vendor обычно не должна быть там, но она вам нужна, если вы хотите делать то, что пытаетесь сделать. Это не принято. Обычно разработчики запускают свои тесты в корневой папке своего проекта, а не на зависимостях, но у вас возник вопрос: «Как я могу запустить свои тесты, когда это зависимость». Ответ заключается в том, что вам нужно создать файлы поставщика и автозагрузки в папке вашего проекта.

Тесты запускаются только в том случае, если вы запустите composer install внутри папки проекта. Но это не проблема, если тесты не запускаются без этого.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector