2013-02-27 39 views
2

我有一個我創建的基本ZF2 InputFilter。我如何使用PHPUnit進行測試而不將其附加到Form?如何用PHPUnit測試我的Zend Framework 2 InputFilter?

我找不到有關如何完成的任何示例。希望有人能幫忙。

+0

難道你不只是創建一個獨立的過濾器實例並測試調用其過濾器方法的結果嗎? – Crisp 2013-02-27 19:44:13

回答

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()

+0

非常接近我之後做的一些其他人給了我一個建議。我最終創建了一個單獨的Form對象,創建了這些字段,附加了我的InputFilter,添加了數據並進行了驗證。我不知道你可以將數據設置到InputFilter本身。我會這樣做。謝謝! – Jeebs24 2013-02-28 00:07:00

+0

我試過這個例子,它的大部分工作。但第一個示例總是返回「失敗斷言錯誤匹配預期爲真」。 – 2013-08-21 20:49:01

+0

我認爲ZF2'2.2.0'和'2.2.3'之間有變化 - 請嘗試不同的版本並報告錯誤,因爲我也聽說過它。 – Ocramius 2013-08-22 07:55:47

相關問題