2

我创建了一个基本的 ZF2 InputFilter。如何在不将其附加到表单的情况下使用 PHPUnit 对其进行测试?

我找不到有关如何完成此操作的任何示例。希望有人能帮忙。

4

1 回答 1

6

我通常有一个数据提供者来测试我的输入过滤器。

这是一个包含两个非常简单字段的示例输入过滤器:

use Zend\InputFilter\InputFilter;
use Zend\InputFilter\Input;
use Zend\I18n\Validator\Alnum;

class MyInputFilter extends InputFilter
{
    public function __construct()
    {
        $name = new Input('name');

        $name->setRequired(false)->setAllowEmpty(true);
        $this->add($name);

        $nickname = new Input('nickname');

        $nickname->getValidatorChain()->attach(new Alnum());
        $this->add($nickname);
    }
}

这是一个测试类:

class MyInputFilterTest extends \PHPUnit_Framework_TestCase
{
    public function setUp()
    {
        $this->inputFilter = new MyInputFilter();
    }

    /** @dataProvider validatedDataProvider */
    public function testValidation($data, $valid)
    {
        $this->inputFilter->setData($data);
        $this->assertSame($valid, $this->inputFilter->isValid());
    }

    public function validatedDataProvider()
    {
        return array(
            array(
                array(),
                false
            ),
            array(
                array('name' => '', 'nickname' => 'Ocramius'),
                true
            ),
            array(
                array('name' => 'Test', 'nickname' => 'Ocramius'),
                true
            ),
            array(
                array('name' => 'Test', 'nickname' => 'Hax$or'),
                false
            ),
        );
    }
}

这是一个非常简单的例子,但我基本上是在过滤器中抛出不同的数据集并检查与我相关的内容(在这种情况下检查数据是有效还是无效)。

如果您的过滤器对数据应用转换,您可能还想检查输出$inputFilter->getValues()是什么。

如果错误消息与您相关,您也可以检查$inputFilter->getMessages().

于 2013-02-27T19:47:27.207 回答