Tôi sẽ cung cấp một cách giải quyết bẩn ở đây, có thể dễ dàng sao chép mà không cần điều chỉnh bất kỳ mã nào.
Có thể có giải pháp tốt hơn, tôi mở cho câu trả lời khác!
Ngoài ra, tôi sẽ không hứa 100% rằng điều này hoạt động trong mọi trường hợp. Có lẽ opcache có thể mang lại những bất ngờ khó chịu?
Tạo tệp sau trong "tests/src/$modulename/Traits/AutoloadHelperTrait.php"
.
Thay thế <MODULENAME>
với tên mô-đun thực.
<?php
/**
* @tập tin
* Đăng ký toàn bộ thư mục 'tests/src/' trong trình nạp lớp.
*
* Theo mặc định, tích hợp Drupal phpunit chỉ đăng ký không gian tên _some_
* thư mục trong 'tests/src/' trong trình tải lớp. một trong số đó là
* '/Đặc điểm/'.
* Giải pháp thay thế này đăng ký không gian tên cấp cao nhất.
*
* Mã được viết theo cách có thể dễ dàng sao chép sang các mô-đun khác:
* - Nó độc lập với tên mô-đun.
* - Nó không phụ thuộc vào vị trí đặt mô-đun trong hệ thống tệp.
*
* Xem https://drupal.stackexchange.com/questions/309143/autoload-helper-classes-in-tests-src-for-phpunit-in-contrib-module
*
* @see \drupal_phpunit_populate_class_loader()
* @see \drupal_phpunit_get_extension_namespaces()
*/
khai báo (strict_types=1);
không gian tên Drupal\Tests\<MODULENAME>\Traits;
sử dụng Composer\Autoload\ClassLoader;
\call_user_func(hàm tĩnh (): void {
// Lớp Composer ClassLoader luôn có mặt ở cùng một vị trí
// trong thư mục nhà cung cấp. Từ đó chúng ta có thể tìm đường đến
// autoload.php để lấy bộ nạp lớp thực.
$rc = new \ReflectionClass(ClassLoader::class);
/** @var \Composer\Autoload\ClassLoader $classLoader */
$classLoader = yêu cầu dirname($rc->getFileName(), 2) . '/autoload.php';
// Xác định không gian tên và thư mục từ các hằng số ma thuật.
// Điều này cho phép mã được sao chép ở nơi khác.
$level = \substr_count(__NAMESPACE__, '\');
$dir = dirname(__DIR__, $level - 2);
// Không gian tên luôn bắt đầu bằng 'Drupal\Tests\', độc lập với
// tên mô-đun.
$nspos = \strpos(__NAMESPACE__, '\', 13);
$namespace = \substr(__NAMESPACE__, 0, $nspos + 1);
$classLoader->addPsr4($namespace, $dir);
});
/**
* Bao gồm đặc điểm này để đăng ký toàn bộ bài kiểm tra/src/ để tải lớp.
*/
đặc điểm AutoloadHelperTrait {}
Bây giờ hãy thêm đặc điểm vào bất kỳ lớp kiểm tra nào cần bật tính năng tự động tải này. Hoặc bao gồm nó từ một lớp cơ sở thử nghiệm.