php - How to test a symfony form type with constructor -


i'm struggle typetestcase symfony testing form type constructor. while offical solution registring form service works in application, same form type cannot tested typetestcase. since typetestcase extends formintegrationtestcase , extends \phpunit_framework_testcase instead kerneltestcase. formfactory in typetestcase doesn't/can't forms registered services , throw error calling phpunit:

tests\demobundle\form\type\demotypetest::testsubmitvaliddata missing argument 1 demobundle\form\type\demotype::__construct(), called in /var/www/vendor/symfony/symfony/src/symfony/component/form/formregistry.php on line 90 , defined 

the way i've see not serving dependency via constructor using optionsresolver in configureoptions set required element setrequired method dependency.

here relevant parts code:

demotype.php

[...] class demotype extends abstracttype {     /**      * @var entitymanager      */     protected $entitymanager;      public function __construct($entitymanager)     {         $this->entitymanager = $entitymanager;     } [...] 

services.yml

app.form.type.demo:     class: demobundle\form\type\demotype     arguments: ["@doctrine.orm.entity_manager"]     tags:         - { name: form.type } 

demotypetest.php

[...] class demotypetest extends typetestcase {      protected function getextensions()     {         $classmetadata = $this->getmock(classmetadata::class, [], [], '', false);         /* @var validatorinterface|\phpunit_framework_mockobject_mockobject $validator */         $validator = $this->getmock(validatorinterface::class);         $validator->method('validate')->will($this->returnvalue(new constraintviolationlist()));         $validator->method('getmetadatafor')->will($this->returnvalue($classmetadata));         return [             new validatorextension($validator),         ];     }      public function testsubmitvaliddata()     {         $formdata = [             'some' => 'data',         ];          $form = $this->factory->create(demotype::class);  [...] 

you can instantiate formtype , pass form factory, described in doc.

you can mock doctrine entity manager, example:

public function testsubmitvaliddata() {   // mock formtype: entity   $em = $this->getmockbuilder('\doctrine\orm\entitymanager')       ->disableoriginalconstructor()       ->getmock();      $type = new demotype($em);     $formdata = [         'some' => 'data',     ];      $form = $this->factory->create($type);     ... 

a sample mocking doctrine object stack simulate repo method can take @ this answer or ask :)

hope help


Comments

Popular posts from this blog

authentication - Mongodb revoke acccess to connect test database -

r - Update two sets of radiobuttons reactively - shiny -

ios - Realm over CoreData should I use NSFetchedResultController or a Dictionary? -