Я только начинаю использовать PHPUnit с Zend и не нуждаюсь в помощи, чтобы понять, как эти тесты должны работать.Zend 2: Модульные тесты для класса формы
Я хочу проверить, если форма возвращает какое-либо сообщение об ошибке, если я не передаю никаких параметров POST.
Проблема заключается в том, что одно поле из моей формы с помощью 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();
},
),
));
...
Я получаю следующее сообщение об ошибке Doctrine в:
Fatal error: Call to a member function getIdentifierFieldNames() on null
Я попытался переопределить это поле издевались объекта, однако Zend Безразлично» t позволяют objects
в type
, просто класс имя (string
), поэтому этот код не работает:
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 is not valid');
}
Что я делаю неправильно? Как проверить такой код?
Итак, как я должен проверить Если форма возвращает сообщения проверки, если кто-то представляет пустую форму? Или, если форма действительна, если пользователь предоставляет правильные данные? Мне нужна функциональность Doctrine для тестирования этого – user1409508
Кажется, вам нужно больше практики для написания модульных тестов. Прежде всего: вы не пишете код внутри вашего модульного теста - вместо этого вы запускаете свой код. Я предлагаю играть с более легкими единицами, прежде чем пытаться тестировать контроллеры, генерирующие формы, которые используют сущности-менеджеры. Вы должны быть уверены, что вы хотите проверить на своем устройстве, и если вы хотите использовать двойные тесты или иметь фиксированный набор данных и так далее. – iRaS
Возможно, вы правы, мне нужно больше практики для написания тестов. Но вы не объяснили, как я должен тестировать формы и inputFilters, связанные с Doctrine. Я хочу проверить, получаю ли сообщения проверки, когда пользователь посылает пустую форму, или пропускает некоторые входы. Причина, по которой я написал код в моих тестах, заключается в том, что я хотел показать, что я пытался заставить его работать с Doctrine – user1409508