私はZendでPHPUnitを使用し始めています。これらのテストがどのように機能するかを理解するのに少し助けが必要です。Zend 2:フォームクラスのユニットテスト
POSTパラメータを渡さないと、フォームからエラーメッセージが返されたかどうかをテストします。
問題は、私は次のエラーを取得する私のフォームから一つのフィールドはDoctrineの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();
},
),
));
...
を使用していることである。
Fatal error: Call to a member function getIdentifierFieldNames() on null
私は嘲笑オブジェクトでこのフィールドを上書きしようとした、しかし、Zendが」doesnの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
あなたは正しいかもしれません。テストを書くためにもっと練習が必要です。しかし、Doctrineに接続されたフォームとinputFiltersをどのようにテストすればよいのか説明していませんでした。 ユーザーが空のフォームを送信したとき、または入力をスキップしたときに検証メッセージを受け取るかどうかをテストします。 私がテストでコードを書いたのは、私がDoctrineで動作させようとしたことを示したかったからです – user1409508