我创建了一个基本的 ZF2 InputFilter。如何在不将其附加到表单的情况下使用 PHPUnit 对其进行测试?
我找不到有关如何完成此操作的任何示例。希望有人能帮忙。
我创建了一个基本的 ZF2 InputFilter。如何在不将其附加到表单的情况下使用 PHPUnit 对其进行测试?
我找不到有关如何完成此操作的任何示例。希望有人能帮忙。
我通常有一个数据提供者来测试我的输入过滤器。
这是一个包含两个非常简单字段的示例输入过滤器:
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()
.