任何人都可以提供一些关于Zend Framework中表单单元测试的资源吗?

时间:2011-04-27 12:05:01

标签: php zend-framework forms phpunit

如何在zend框架中测试表单? 我的zend项目中有一个登录表单,Login.php是:

<?php
class DEMO_Form_Login extends Zend_Form {

    public function init() {
        $this
            ->setMethod('post')
            ->addElementPrefixPaths(array(
                'decorator' => array('DEMO_Decorator' => '../application/decorators'),
            ));

        $this
        ->addElement('text', 'username', array(
            'label' => _T('USERNAME'),
            'required' => true,
            'value' => '',
            'filters'    => array('StringTrim'),
            'decorators' => array('ViewHelper')
            ))
        ->addElement('password', 'password', array(
            'label' => _T('PASSWORD'),
            'required' => true,
            'value' => '',
            'decorators' => array('ViewHelper')
            ))
        ->addElement('submit', 'submit', array(
            'label' => _T('LOG_INTO'),
            'ignore' => true,
            'decorators' => array(
                array('Submit', array('separator'=>'<br />')))  
            ));
    }

}

我该如何测试?任何人都可以提供一些资源吗?

1 个答案:

答案 0 :(得分:2)

我想不出任何资源,但我可以举一个例子说明我会怎么做。

因此,我将创建一个FormTestCase类,如下所示:

class FormTestCase extends PHPUnit_Framework_TestCase {

    private $_form;

    public function setUp() {
        parent::setUp();
    }

}

然后可以按如下方式测试每个表格:

class DemoFormTest extends FormTestCase {

    public function setUp() {
        parent::setUp();
        $this->_form = new My_Form_Demo();
    }

    public function testCorrectData() {
        $mockInputData = array(
            'username' => 'somename',
            'password' => 'somepass',
            'submit' => 'LOG_INTO'
        );

        $this->assertTrue($this->_form->isValid($mockInputData));
    }

     public function testInCorrectData() {
        $mockInputData = array(
            'username' => 'somename',   
            // password not given
            'submit' => 'LOG_INTO'
        );

        $this->assertFalse($this->_form->isValid($mockInputData));
    }

    // some other tests
}

在上面的示例中,My_Form_Demo是您表单的simplified版本。我需要简化它,因为我没有你的自定义装饰器,我无法运行测试。我可以看到我用于此示例的设置here(以及我的所有其他测试)。

希望这会对你有所帮助。