I suggest you override the TypeTestCase :: getExtensions () method
use Symfony\Component\Form\Extension\Core\CoreExtension; use Symfony\Component\Form\Extension\Core\Type\FormType; use Symfony\Component\Form\Extension\Validator\ValidatorExtension; use Symfony\Component\Form\Form; use Symfony\Component\Translation\IdentityTranslator; use Symfony\Component\Validator\ConstraintValidatorFactory; use Symfony\Component\Validator\Context\ExecutionContextFactory; use Symfony\Component\Validator\Mapping\ClassMetadata; use Symfony\Component\Validator\Mapping\Factory\MetadataFactoryInterface; use Symfony\Component\Validator\Tests\Fixtures\FakeMetadataFactory; use Symfony\Component\Validator\Validator\RecursiveValidator; .... public function getExtensions() { $extensions = parent::getExtensions(); $metadataFactory = new FakeMetadataFactory(); $metadataFactory->addMetadata(new ClassMetadata( Form::class)); $validator = $this->createValidator($metadataFactory); $extensions[] = new CoreExtension(); $extensions[] = new ValidatorExtension($validator); return $extensions; }
add the createValidator () method to your test class:
protected function createValidator(MetadataFactoryInterface $metadataFactory, array $objectInitializers = array()) { $translator = new IdentityTranslator(); $translator->setLocale('en'); $contextFactory = new ExecutionContextFactory($translator); $validatorFactory = new ConstraintValidatorFactory(); return new RecursiveValidator($contextFactory, $metadataFactory, $validatorFactory, $objectInitializers); }
You do not need to override TypeTestCase :: getTypeExtensions (), because the ValidatorExtension class already has a loadTypeExtensions () method.
Then your test method might look like this:
public function testSubmitValidData() { $formData = array( 'name' => 'Test Name', 'address' => '', ); $form = $this->factory->create(ContactType::class); $form->submit($formData); $this->assertTrue($form->isValid()); $this->assertTrue($form->isSynchronized()); $view = $form->createView(); $children = $view->children; foreach (array_keys($formData) as $key) { $this->assertArrayHasKey($key, $children); } }
You can check invalid data:
public function testSubmitInvalidValidData() { $formData = array( 'name' => 'T', ); $form = $this->factory->create(ContactType::class); $form->submit($formData); $this->assertFalse($form->isValid()); $this->assertFalse($view->children['name']->vars['valid']); }
Sources
:
source share