我创建了一个基本的ZF2 InputFilter。我如何使用PHPUnit测试它而不将其附加到表单?
我找不到任何有关如何完成此操作的示例。希望有人可以提供帮助。
答案 0 :(得分: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()
。