Voi oferi aici o soluție murdară, care poate fi copiată cu ușurință fără a ajusta niciun cod.
S-ar putea să fie soluții mai bune, sunt deschis pentru alte răspunsuri!
De asemenea, nu voi promite 100% că acest lucru funcționează în toate circumstanțele. Poate că opcache poate aduce surprize urâte?
Creați următorul fișier în „tests/src/$modulename/Traits/AutoloadHelperTrait.php”
.
A inlocui <MODULENAME>
cu numele real al modulului.
<?php
/**
* @fișier
* Înregistrează întregul director „tests/src/” în încărcătorul de clasă.
*
* În mod implicit, integrarea Drupal phpunit înregistrează doar _un_name_space
* directoarele din „tests/src/” din încărcătorul de clasă. Unul dintre ei este
* „/Trăsături/”.
* Această soluție înregistrează spațiul de nume de nivel superior.
*
* Codul este scris într-un mod care poate fi ușor copiat în alte module:
* - Este independent de numele modulului.
* - Este independent de locul în care este plasat modulul în sistemul de fișiere.
*
* Vedeți https://drupal.stackexchange.com/questions/309143/autoload-helper-classes-in-tests-src-for-phpunit-in-contrib-module
*
* @vedeți \drupal_phpunit_populate_class_loader()
* @vedeți \drupal_phpunit_get_extension_namespaces()
*/
declare(strict_types=1);
spațiu de nume Drupal\Tests\<NUME MODUL>\Trasături;
utilizați Composer\Autoload\ClassLoader;
\call_user_func(funcție statică (): void {
// Clasa Composer ClassLoader este întotdeauna prezentă în aceeași locație
// în directorul furnizorului. De acolo ne putem parcurge drumul spre
// autoload.php pentru a obține încărcătorul de clasă reală.
$rc = nou \ReflectionClass(ClassLoader::class);
/** @var \Composer\Autoload\ClassLoader $classLoader */
$classLoader = require dirname($rc->getFileName(), 2) . '/autoload.php';
// Determinați spațiul de nume și directorul din constantele magice.
// Aceasta permite ca codul să fie copiat în altă parte.
$level = \substr_count(__NAMESPACE__, '\');
$dir = dirname(__DIR__, $nivel - 2);
// Spațiul de nume începe întotdeauna cu „Drupal\Tests\”, independent de
// numele modulului.
$nspos = \strpos(__NAMESPACE__, '\', 13);
$namespace = \substr(__NAMESPACE__, 0, $nspos + 1);
$classLoader->addPsr4($namespace, $dir);
});
/**
* Includeți această trăsătură pentru a înregistra întregul test/src/ pentru încărcarea clasei.
*/
caracteristică AutoloadHelperTrait {}
Acum includeți trăsătura în orice clasă de testare care necesită activarea acestei încărcări automate. Sau includeți-l dintr-o clasă de bază de testare.