Composer require-dev требующие зависимости в различных пакетах require-dev


У меня есть некоторые тесты, которые находятся в пространстве имен и загружаются автоматически в пакете A с помощью

"autoload-dev": {
    "psr-4": {
        "Vendor\PackageA\PhpUnit\": "tests/PhpUnit"
    }
},

Это прекрасно работает.

У меня есть другой пакет, пакет B, который также имеет тесты пространства имен, требующие одного из тестов пространства имен в пакете A

"autoload-dev": {
    "psr-4": {
        "Vendor\PackageB\PhpUnit\": "tests/PhpUnit"
    }
},

Однако, когда я пытаюсь включить файл в пакет B, класс не найден

use VendorPackageAPhpUnitMyTestFromA;

class MyTestFromB extends MyTestFromA
{

Заставляя меня думать, что материал autoload-dev из других пакетов не загружается.

PHP фатальная ошибка: класс Поставщикапакетотель расположенс PHPUnitMyTestFromA' не найден в /полный/путь/к/PackageBClass.php on line 3

Когда я пытаюсь импортировать файл, который загружается автоматически с помощью autoload из пакета B, а не autoload-dev, я не получаю ошибки.

Как я могу преодолеть это?

Часть меня думает сделать пакет только для тестов и загрузить его в обоих без autoload-dev, но я хочу сначала подтвердить.

1 5

1 ответ:

Решение: Composer autoload-dev не работает .

Взгляните на документы. Он говорит:"autoload-dev (только root)". root only означает, что он применяется только к корневому пакету. Поскольку вы включили пакет, показанный файл composer.json не является корневым пакетом, и поэтому раздел autoload-dev игнорируется.