ฉันมีเอนทิตีเนื้อหาที่กำหนดเองและการตรวจสอบความถูกต้องบางอย่างในแบบฟอร์มเอนทิตี ตรวจสอบแบบฟอร์ม
กระบวนการ.
ตอนนี้ฉัน "แค่" ต้องการทดสอบการใช้งานไฟล์ ตรวจสอบแบบฟอร์ม
วิธีการ (หรือสำหรับการเริ่มต้นฉันแค่ต้องการทดสอบรหัสแบบฟอร์มที่ถูกต้อง แต่ก็ล้มเหลว)
การเยาะเย้ยเอนทิตีที่กำหนดเองของฉันเองเป็นปัญหาหลักที่ฉันมีในขณะนี้
นี่คือตัวอย่างโค้ดบางส่วนและข้อความแสดงข้อผิดพลาดของฉัน
นี่คือวิธีตรวจสอบรูปแบบที่กำหนดเองของฉัน:
ฟังก์ชันสาธารณะ validateForm (อาร์เรย์ &$form, FormStateInterface $form_state): ContentEntityInterface {
$simpleField = $form_state->getValue('field_simplefield')[0]['value'];
ถ้า (preg_match('/^simpleRegEx$/', $simpleField)) {a
$form_state->setErrorByName('field_simplefield', $this->t('ไม่ถูกต้อง'));
}
ส่งคืนพาเรนต์::validateForm($form, $form_state);
}
และนี่คือการทดสอบของฉัน:
// ทดสอบว่า ID แบบฟอร์มที่ถูกต้องถูกส่งกลับ
ฟังก์ชั่นสาธารณะ testFormId () {
$container = ใหม่ ContainerBuilder();
$entityRepository = $this->prophesize(EntityRepositoryInterface::class);
$container->set('entity.repository', $entityRepository->เปิดเผย());
$entityTypeBundleInfo = $this->prophesize(EntityTypeBundleInfoInterface::class);
$container->set('entity_type.bundle.info', $entityTypeBundleInfo->เปิดเผย());
$time = $this->prophesize(เวลา::class);
$container->set('datetime.time', $time->reveal());
$form = New CustomEntityForm($entityRepository->reveal(), $entityTypeBundleInfo->reveal(), $time->reveal());
$this->assertEquals('module_name_settings_form', $form->getFormId());
}
มันล้มเหลวด้วยข้อผิดพลาด:
ข้อผิดพลาด: การเรียกไปยังฟังก์ชันสมาชิก getEntityTypeId() เป็นโมฆะ
เส้นทาง/เว็บ/core/lib/Drupal/Core/Entity/EntityForm.php:79
เส้นทาง/เว็บ/โปรไฟล์/contrib/a_profile/modules/emp_customentity/tests/src/Unit/CustomEntityFormTest.php:59
เส้นทาง/ผู้ขาย/phpunit/phpunit/src/Framework/TestResult.php:726
เส้นทาง/ผู้ขาย/phpunit/phpunit/src/Framework/TestSuite.php:677
เส้นทาง/ผู้ขาย/phpunit/phpunit/src/Framework/TestSuite.php:677
เส้นทาง/ผู้ขาย/phpunit/phpunit/src/TextUI/TestRunner.php:673
เส้นทาง/ผู้ขาย/phpunit/phpunit/src/TextUI/Command.php:143
เส้นทาง/ผู้ขาย/phpunit/phpunit/src/TextUI/Command.php:96
มีวิธีที่ค่อนข้างง่ายในการทำเช่นนี้หรือฉันต้องจำลองบริการที่จำเป็นทั้งหมด (เอนทิตี. พื้นที่เก็บข้อมูล
, entity_type.bundle.info
, วันที่และเวลา
) และเอนทิตีของฉันเองเพื่อเรียกใช้ฟังก์ชัน ตรวจสอบแบบฟอร์ม
ในการทดสอบของฉัน?
แล้วถ้าสิ่งนี้ได้รับการแก้ไขฉันจะทดสอบเมธอด validateForm ได้อย่างไร