Điểm:1

Tự động tải các lớp trình trợ giúp trong các bài kiểm tra/src/ cho phpunit trong mô-đun đóng góp

lá cờ in

Tôi đang làm việc trên một mô-đun đóng góp với các bài kiểm tra phpunit.

Hiện tại không có composer.json hoặc phpunit.xml hoặc quy trình cài đặt trong chính mô-đun, thay vào đó, người ta phải chạy các kiểm tra chức năng và trình duyệt từ một trang web drupal tùy chỉnh, nơi mô-đun được cài đặt trong web/modules/contrib/*. Cho đến nay điều này hoạt động.

Bây giờ tôi muốn sử dụng các lớp trợ giúp trong kiểm tra/src/Trợ giúp/, trong không gian tên "Drupal\Tests\$modulename\Helper\" và có thể ở nơi khác.

Tuy nhiên, tôi nhận thấy rằng drupal_phpunit_get_extension_namespaces() chỉ đăng ký một số không gian tên được chọn trong "Drupal\Tests\$modulename\", thay vì toàn bộ không gian tên.

Những câu hỏi của tôi:

  • Tại sao tích hợp Drupal phpunit hoạt động theo cách này, thay vì đăng ký toàn bộ kiểm tra/src/ thư mục không gian tên?
  • một cách tốt để đăng ký toàn bộ là gì kiểm tra/src/ thư mục trong trình nạp lớp? Tôi vẫn muốn có thể chạy thử nghiệm từ quá trình cài đặt Drupal bên ngoài mô-đun.

CHỈNH SỬA: Vấn đề mới trên drupal.org: #3258817: Tại sao chúng ta không đăng ký tất cả /tests/src/ để tải lớp?

Điểm:0
lá cờ in

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.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.