it-swarm.com.de

Was muss in einem Kernel-Test eingerichtet werden, damit der benutzerdefinierte Inhaltstyp verfügbar ist?

Ich habe ein benutzerdefiniertes Modul, das einen Dienst und einen benutzerdefinierten Inhaltstyp definiert. Ich habe erfolgreich einen Funktionstest für den Dienst geschrieben. Jetzt sehe ich, ob ich stattdessen einen Kernel-Test schreiben kann.

Das Problem, auf das ich stoße, ist, dass mein benutzerdefinierter Inhaltstyp (natürlich) benutzerdefinierte Felder enthält. Wenn ich einen Inhalt dieses Typs in der Kernel-Testumgebung erstelle, erkennt Drupal erkennt die benutzerdefinierten Felder nicht.

  • Ich verwende die EntityKernelTestBase.
  • Ich habe public static $modules = array('my_custom_module', 'node'); gesetzt

Welche Stücke fehlen mir? Ich vermute, es gibt ein Schema, das ich zur Installation sagen muss, oder eine andere Methode, die ich aufrufen muss, damit diese benutzerdefinierten Felder erkannt werden.

<?php

namespace Drupal\Tests\my_custom_module\Kernel;

use Drupal\KernelTests\Core\Entity\EntityKernelTestBase;
use Drupal\node\Entity\Node;

/**
 * Tests the my custom service.
 *
 * @group my_custom_module
 */
class MyCustomServiceKernelTest extends EntityKernelTestBase {

  /**
   * Modules to install.
   *
   * @var array
   */
  public static $modules = array('my_custom_module', 'node');

  /**
   * {@inheritdoc}
   */
  public function setUp() {

    parent::setup();

    $user = $this->createUser();

    $container = \Drupal::getContainer();
    $container->get('current_user')->setAccount($user);

    // Create some aquifer pieces of content
    $node = Node::create(array(
      'title' => t('Some title'),
      'type' => 'my_custom_content_type',
      'language' => 'en',
      'field_my_custom_field_1' => 'Put stuff here',
      'field_my_custom_field_2' => 'more stuff',
      'field_my_custom_field' => 1000000,
    ));
    $node->save();
    $reloaded_entity = $this->reloadEntity($node);
    $this->assertSame('debug', $reloaded_entity);
  }
}

Die Anweisung debug assert zeigt, dass die neu geladene Entität meine benutzerdefinierten Felder nicht enthält.

Wenn ich eine $node->set('field_my_custom_field_1', 'some value') - Anweisung in den Code einfüge, anstatt diese Felder in der Node::create - Logik zu übergeben, wird die Fehlermeldung angezeigt, dass der Feldname ungültig ist.

5
vegantriathlete

Für Kerneltests müssen Sie angeben, welche Konfigurationen installiert werden sollen. Zum Beispiel benötigen Sie so etwas in der setUp() -Methode Ihres Tests:

$this->installConfig(['my_custom_module']);

Da dies eine Reihe von Modulen erfordert, müssen Sie wahrscheinlich zusätzliche Module angeben (z. B. filter, node und field).

Dies setzt voraus, dass Ihre Feldkonfigurationen im Verzeichnis config/install Ihres Moduls gebündelt sind.

8
jhedstrom