2

私が作成した基本的な ZF2 InputFilter があります。フォームにアタッチせずにPHPUnitで正確にテストするにはどうすればよいですか?

これがどのように行われるかについてのサンプルが見つかりません。誰かが助けてくれることを願っています。

4

1 に答える 1

6

私は通常、入力フィルターをテストするためのデータプロバイダーを持っています。

これは、2つの非常に単純なフィールドを持つ入力フィルターの例です。

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 に答える