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)) { $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?