Puncte:0

Unit Test validateForm al formularului de entitate de conținut personalizat

drapel ke

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?

drapel ke
Este această întrebare/problema specifică? Sau nu testează nimeni implementările validForm?

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.