Score:1

How to import a custom content type in phpunit

ธง ph

I'm trying to write some PHPUnit Kernel tests that use a custom content type which seem to work until I try to reference fields on the content type. I'm guessing the content type isn't being imported from config. Is there a correct way to do this?

Example code which works in drush php but does not work in phpunit:

  public function createAction() {
    $storage = $this->container->get('entity_type.manager')->getStorage('node');
    $entity = $storage->create(['type' => 'action']);
    $entity->set('title', 'test');
    $entity->set('field_lookup_type', 'address');
    $entity->save();
    return $entity;
  }

The error from phpunit is "InvalidArgumentException: Field field_lookup_type is unknown."

Score:2
ธง in

นั่นจะไม่ทำ คุณต้องสร้างโมดูลทดสอบที่มีการกำหนดค่า YAML เพื่อดำเนินการนี้ หรือสร้างสคริปต์ในการเปลี่ยนแปลงวิธีการตั้งค่าการทดสอบ วิธีหลังนั้นยาวกว่า แต่ช่วยให้คุณไม่ต้องรักษาสำเนาการกำหนดค่า YAML ในโมดูลเพิ่มเติม นี่คือตัวอย่าง

  ตั้งค่าฟังก์ชั่นสาธารณะ () {
    ผู้ปกครอง :: ตั้งค่า ();
    $this->entityTypeManager = $this->container->get('entity_type.manager');

    $this->installEntitySchema('โหนด');
    $this->installEntitySchema('ผู้ใช้');
    $this->installEntitySchema('taxonomy_term');
    $this->installSchema('โหนด', 'node_access');
    $this->installConfig('โหนด');
    $this->installConfig('อนุกรมวิธาน');
    $this->installConfig('ตัวกรอง');

    $this->createContentType(['type' => 'my_content_type']);

    FieldStorageConfig::สร้าง([
      'field_name' => 'field_lookup_type',
      'entity_type' => 'โหนด',
      'type' => 'entity_reference',
      'จำนวนสมาชิก' => 1,
      'ล็อก' => FALSE
      'ดัชนี' => [],
      'การตั้งค่า' => [
        'handler' => 'default:taxonomy_term',
        'handler_settings' => [
          'target_bundles' => [],
          'จัดเรียง' => [
            'field' => 'ชื่อ',
            'direction' => 'asc',
          ]
          'auto_create' => เท็จ
          'auto_create_bundle' => '',
        ]
      ]
    ])->บันทึก();

    FieldConfig::สร้าง([
      'field_name' => 'field_lookup_type',
      'entity_type' => 'โหนด',
      'label' => 'ฟิลด์ของฉัน',
      'มัด' => 'my_content_type',
      'คำอธิบาย' => '',
      'จำเป็น' => เท็จ
      'การตั้งค่า' => [],
    ])->บันทึก();

สิ่งนี้จะสร้างประเภทโหนด สร้างฟิลด์อนุกรมวิธาน และตั้งค่าฟิลด์อนุกรมวิธานเป็นประเภทโหนดนั้น นี่เทียบเท่ากับการโหลดไฟล์ YAML หลายไฟล์

จากนั้น ไม่ว่าจะในการตั้งค่าหรือการทดสอบ คุณสามารถ:

 $node = $this->createNode(['type' => 'my_content_type', 'field_lookup_type' => 1]);

คุณสมบัติในการทำเช่นนี้จำเป็นต้องรวมอยู่ในชั้นเรียนทดสอบของคุณ:

  ใช้ NodeCreationTrait
    ContentTypeCreationTrait,

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา