Am o entitate de conținut personalizată și câteva validări personalizate în formularul de entitate validateForm
metodă.
Acum vreau „doar” să testez implementarea mea validateForm
metoda (sau pentru început vreau doar să testez pentru id-ul de formă corect, dar chiar și acest lucru nu reușește).
Imi bat joc de propria entitate personalizată este principala problemă pe care o am în acest moment.
Iată câteva exemple de cod și mesajul meu de eroare
Aceasta este metoda mea personalizată validateForm:
funcția publică validateForm(array &$form, FormStateInterface $form_state): ContentEntityInterface {
$simpleField = $form_state->getValue('field_simplefield')[0]['value'];
dacă (preg_match('/^simpleRegEx$/', $simpleField)) {a
$form_state->setErrorByName('field_simplefield', $this->t('Nu este valid'));
}
return parent::validateForm($form, $form_state);
}
Și acesta este testul meu:
// Testează dacă este returnat ID-ul corect al formularului
funcția publică testFormId() {
$container = nou 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());
$timp = $this->profetize(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());
}
Eșuează cu eroare:
Eroare: apel la o funcție membru getEntityTypeId() pe null
cale/web/core/lib/Drupal/Core/Entity/EntityForm.php:79
cale/web/profiles/contrib/a_profile/modules/emp_customentity/tests/src/Unit/CustomEntityFormTest.php:59
cale/furnizor/phpunit/phpunit/src/Framework/TestResult.php:726
cale/furnizor/phpunit/phpunit/src/Framework/TestSuite.php:677
cale/furnizor/phpunit/phpunit/src/Framework/TestSuite.php:677
cale/furnizor/phpunit/phpunit/src/TextUI/TestRunner.php:673
cale/furnizor/phpunit/phpunit/src/TextUI/Command.php:143
cale/furnizor/phpunit/phpunit/src/TextUI/Command.php:96
Există o modalitate destul de ușoară de a face acest lucru sau trebuie să batjocoresc toate serviciile necesare (entitate.depozitar
, entity_type.bundle.info
, datetime.time
) ȘI propria mea entitate pentru a apela funcția validateForm
in testul meu?
Și apoi, dacă acest lucru este rezolvat, cum naiba testez metoda validateForm?