3

I want to add a taxonomy term and add field to it. My current code looks this way:

<?php

namespace Drupal\Tests\permissions_by_term\Kernel;

use Drupal\KernelTests\KernelTestBase;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\taxonomy\Entity\Vocabulary;

/**
 * Tests the ERR composite relationship upgrade path.
 *
 * @group permissions_by_term
 */
class SelectTermTest extends KernelTestBase {

  /**
   * {@inheritdoc}
   */
  public static $modules = array('taxonomy', 'text');

  /**
   * List of taxonomy term names by language.
   *
   * @var array
   */
  public $termNames = [];

  /**
   * The vocabulary used for creating terms.
   *
   * @var \Drupal\taxonomy\VocabularyInterface
   */
  protected $vocabulary;

  function setUp() {
    parent::setUp();

    $this->installEntitySchema('taxonomy_term');

    // Create a vocabulary.
    $this->vocabulary = Vocabulary::create([
      'name' => 'Views testing tags',
      'vid' => 'views_testing_tags',
    ]);
    $this->vocabulary->save();

    // Add a translatable field to the vocabulary.
    $field = FieldStorageConfig::create(array(
      'field_name' => 'field_foo',
      'entity_type' => 'taxonomy_term',
      'type' => 'text',
    ));
    $field->save();
    FieldConfig::create([
      'field_name' => 'field_foo',
      'entity_type' => 'taxonomy_term',
      'label' => 'Foo',
      'bundle' => 'views_testing_tags',
    ])->save();
  }

  public function testSomething() {
  }

}

If I run the test by the following command:

vendor/bin/phpunit -c modules/permissions_by_term modules/permissions_by_term/tests/src/Kernel/SelectTermTest.php

I'm getting the following output:

PHPUnit 4.8.11 by Sebastian Bergmann and contributors.

E

Time: 882 ms, Memory: 6.00Mb

There was 1 error:

1) Drupal\Tests\permissions_by_term\Kernel\SelectTermTest::testSomething Drupal\Core\Entity\Exception\NoCorrespondingEntityClassException: The Drupal\field\Entity\FieldStorageConfig class does not correspond to an entity type.

/home/peter/Websites/pbt-d8/core/lib/Drupal/Core/Entity/EntityTypeRepository.php:98 /home/peter/Websites/pbt-d8/core/lib/Drupal/Core/Entity/EntityManager.php:375 /home/peter/Websites/pbt-d8/core/lib/Drupal/Core/Entity/Entity.php:509 /home/peter/Websites/pbt-d8/modules/permissions_by_term/tests/src/Kernel/SelectTermTest.php:49

FAILURES! Tests: 1, Assertions: 1, Errors: 1.

I do not understand this part:

Drupal\Core\Entity\Exception\NoCorrespondingEntityClassException: The Drupal\field\Entity\FieldStorageConfig class does not correspond to an entity type.

As an example I have used the Drupal core taxonomy test from

core/modules/taxonomy/src/Tests/Views/TaxonomyFieldFilterTest.php

This test does what I want to do, but is not a Kernel test. It is a Simpletest, since it inherits from WebTestBase. If I use WebTestBase, it works. But the test is much slower then. Do you know what's missing in my code for running it as a Kernel Test?

5
  • 1
    I didn't try but I guess it should be similar as creating node with field. Please take a look on the answer of this post.
    – Jimmy Ko
    Jul 29, 2016 at 22:16
  • 1
    This is corrected.
    – jepster
    Jul 30, 2016 at 9:15
  • 1
    Thanks for your comments so far. Actually I want to create an automated test for taxonomy terms. For my test I need to add a field to a taxonomy term. I tried it the following way so far: GitHub Gist But I get the following error: Drupal\Core\Entity\Exception\NoCorrespondingEntityClassException: The Drupal\field\Entity\FieldStorageConfig class does not correspond to an entity type. How can I fix this?
    – jepster
    Jul 30, 2016 at 14:58
  • 1
    The way you show us is to create a vocabulary and attach a field to that vocabulary. You question is misleading, could you update it?
    – Jimmy Ko
    Jul 30, 2016 at 16:47
  • 1
    You have been right, what I really wanted to do was to create a vocabulary and add a field to it. I was thinking I need to add a field to the term. Thanks for the hint. I have updated my question.
    – jepster
    Jul 31, 2016 at 11:14

2 Answers 2

7

You need to enable the field module so its entity types are present. Kernel test base does not enable required modules so the FieldConfig and FieldStorageConfig entity types don't exist until you enable the field module. Put it in the $modules property with 'taxonomy' and 'text'.

5

You should try FieldKernelTestBase instead of just KernelTestBase. There is a helper method called createFieldWithStorage who will do the job.

1
  • 1
    Why not just export and import the config? Instead of recreating the fields with storage? Just curious
    – AlxVallejo
    Apr 17, 2020 at 15:34

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.