Puncte:1

How to import a custom content type in phpunit

drapel 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."

Puncte:2
drapel in

Asta nu o va face. Fie trebuie să creați un modul de testare care să aibă configurații YAML pentru a face acest lucru, fie să scrieți un script în modificările metodei de configurare a testului. Această din urmă metodă este mai lungă, dar vă eliberează de a fi nevoit să păstrați copii ale configurațiilor YAML într-un modul(e) suplimentar(e). Iată un exemplu.

  funcția publică setUp() {
    părinte::setUp();
    $this->entityTypeManager = $this->container->get('entity_type.manager');

    $this->installEntitySchema('nod');
    $this->installEntitySchema('utilizator');
    $this->installEntitySchema('taxonomy_term');
    $this->installSchema('nod', 'node_access');
    $this->installConfig('nod');
    $this->installConfig('taxonomie');
    $this->installConfig('filtru');

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

    FieldStorageConfig::create([
      'field_name' => 'field_lookup_type',
      'entity_type' => 'nod',
      'type' => 'entity_reference',
      'cardinalitate' => 1,
      'blocat' => FALSE,
      'indexuri' => [],
      'settings' => [
        'handler' => 'default:taxonomy_term',
        'handler_settings' => [
          'target_bundles' => [],
          'sortare' => [
            'field' => 'nume',
            'direction' => 'asc',
          ],
          'auto_create' => false,
          'auto_create_bundle' => '',
        ],
      ]
    ])->salvare();

    FieldConfig::create([
      'field_name' => 'field_lookup_type',
      'entity_type' => 'nod',
      'label' => 'Câmpul meu',
      'bundle' => 'my_content_type',
      'description' => ''',
      „necesar” => FALSE,
      'settings' => [],
    ])->salvare();

Aceasta creează un tip de nod, creează un câmp de taxonomie și setează câmpul de taxonomie la acel tip de nod. Acesta este echivalentul încărcării mai multor fișiere YAML.

Apoi, fie în configurare, fie într-un test în sine, puteți:

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

Trăsăturile pentru a face acest lucru trebuie incluse în clasa dvs. de testare:

  utilizați NodeCreationTrait,
    ContentTypeCreationTrait,

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.