2

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?

  • 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 '16 at 22:16
  • This is corrected. – jepster Jul 30 '16 at 9:15
  • 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 '16 at 14:58
  • 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 '16 at 16:47
  • 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 '16 at 11:14
5

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'.

4

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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