phpunit - Zend 2: Unit tests for form class -


i'm starting using phpunit zend , need little figure out how these tests should work.

i want test if form return error message if not pass post parameters.

the problem 1 field form using doctrine's doctrinemodule\form\element\objectselect

    ...     $this->add(array(         'type' => 'doctrinemodule\form\element\objectselect',         'name' => 'user',         'attributes' => array(             'id' => 'user-label',         ),         'options' => array(             'object_manager' => $em,             'target_class' => 'application\entity\user',             'property' => 'username',             'label' => 'user:',             'display_empty_item' => true,             'empty_item_label'   => '---',             'label_generator' => function($entity) {                 return $entity->getusername();             },         ),     ));     ... 

i following error:
fatal error: call member function getidentifierfieldnames() on null

i tried override field mocked object, zend doesn't allow objects in type, class name (string), code doesn't work:

public function testifformisvalid() {     $objectselect = $this->getmockbuilder('doctrinemodule\form\element\objectselect')         ->disableoriginalconstructor()         ->getmock();     $objectselect->expects($this->any())         ->method('getvalueoptions')         ->will($this->returnvalue(array()));      $form = new \appmodulecomment\form\comment('form', array(         'em' => $this->em  // mocked object     ));     $form->add(array(         'type' => $objectselect,         'name' => 'user',         'attributes' => array(             'id' => 'user-label',         ),         'options' => array(             'object_manager' => $this->em,             'target_class' => 'application\entity\user',             'property' => 'username',             'label' => 'user:',             'display_empty_item' => true,             'empty_item_label'   => '---',             'label_generator' => function($entity) {                 return $entity->getusername();             },         ),     ));      $data = array(         'id' => null,         'user' => null     );      $form->setdata($data);     $this->asserttrue($form->isvalid(), 'form not valid'); }     

what doing wrong? how should test such code?

it seems testing functionality of zend or doctrine (or both) , not own code. when use libraries should trust these libraries.

what happens is: form\form::add() uses form\factory::create() create array element. form\factory::create() uses form\formelementmanager::get() element given type.

your type object , because form\formelementmanager::get() can not handle objects script fail.

it seems want test if post empty form::valid() calls objectselect::valid() not verify if value null. that's code doctrine / zend not yours. don't test it.

more interesting gets when want mock result of select within doctrines objectselect. that's question.


Comments

  1. Did you manage to find a solution for this? Sometimes it's necessary to create integration tests that test entire actions that have forms with ObjectSelect elements.

    ReplyDelete

Post a Comment