Score:0

Unit Test validateForm of custom content entity form

ke flag

I have a custom content entity and some custom validations in the entity form validateForm method.

Now I "just" want to test my implementation of the validateForm method (or for the start I just want to test for the correct form id, but even this fails).

Mocking my own custom entity is the main problem I have at the moment.

Here are some code examples and my error message This is my custom validateForm method:

public function validateForm(array &$form, FormStateInterface $form_state): ContentEntityInterface {

  $simpleField = $form_state->getValue('field_simplefield')[0]['value'];
  if (preg_match('/^simpleRegEx$/', $simpleField)) {a
    $form_state->setErrorByName('field_simplefield', $this->t('Not valid'));
  }

  return parent::validateForm($form, $form_state);
}

And this is my test:

// Test that the correct form ID is returned
public function testFormId() {
  $container = new ContainerBuilder();
  $entityRepository = $this->prophesize(EntityRepositoryInterface::class);
  $container->set('entity.repository', $entityRepository->reveal());
  $entityTypeBundleInfo = $this->prophesize(EntityTypeBundleInfoInterface::class);
  $container->set('entity_type.bundle.info', $entityTypeBundleInfo->reveal());
  $time = $this->prophesize(Time::class);
  $container->set('datetime.time', $time->reveal());


  $form = new CustomEntityForm($entityRepository->reveal(), $entityTypeBundleInfo->reveal(), $time->reveal());
  $this->assertEquals('module_name_settings_form', $form->getFormId());
}

It fails with error:

Error : Call to a member function getEntityTypeId() on null
 path/web/core/lib/Drupal/Core/Entity/EntityForm.php:79
path/web/profiles/contrib/a_profile/modules/emp_customentity/tests/src/Unit/CustomEntityFormTest.php:59
 path/vendor/phpunit/phpunit/src/Framework/TestResult.php:726
 path/vendor/phpunit/phpunit/src/Framework/TestSuite.php:677
 path/vendor/phpunit/phpunit/src/Framework/TestSuite.php:677
 path/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:673
 path/vendor/phpunit/phpunit/src/TextUI/Command.php:143
 path/vendor/phpunit/phpunit/src/TextUI/Command.php:96

Is there a rather easy way to do this or do I have to mock all the necessary services (entity.repository, entity_type.bundle.info, datetime.time) AND my own entity to call the function validateForm in my test?

And then if this is solved, how the heck do I test the validateForm method?

ke flag
Is this question/problem to specific? Or does nobody test their validForm implementations?
mangohost

Post an answer

Most people don’t grasp that asking a lot of questions unlocks learning and improves interpersonal bonding. In Alison’s studies, for example, though people could accurately recall how many questions had been asked in their conversations, they didn’t intuit the link between questions and liking. Across four studies, in which participants were engaged in conversations themselves or read transcripts of others’ conversations, people tended not to realize that question asking would influence—or had influenced—the level of amity between the conversationalists.