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.
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