2013-07-24 31 views
1

我想測試一個使用實體管理器的自定義驗證器。單元測試 - 使用實體管理器的自定義類驗證

的驗證是形式工作正常,但我仍然有問題,測試它:它不會拋出違反

我的驗證是類驗證但違反添加到$this->context->addViolationAt('lastname',$message,$param);

有一個在我的測試類代碼:

public function testNoMoreThreeBatman() { 

    $validator = Validation::createValidatorBuilder()->getValidator(); 

    //I have already checked I got my test database ok, full with what I want 

    //I create a new one with the name 'wayne' (so it'll be not valid) 
    $user = new User(); 
    $user->setLastname('wayne'); 

    $violationList = $validator->validate($user); 

    $this->assertEquals(1, $violationList->count()); 

} 

我已經找到了很多話題,但沒有人給我提示。我有另一個自定義驗證測試,一個簡單的,我沒有問題。 我遊蕩,如果這個問題可能來自實際上它是一類驗證或事實上,它違反添加到現場

因爲我的答案是一個評論,我在這裏發表於響應的更多的知名度:

正確的是Validation::createValidatorBuilder()->getValidator();

而不是$validator = Validation::createValidatorBuilder()->getValidator();

+0

嗯。你的驗證器甚至被稱爲?我懷疑不是。我假設你將用戶映射到validation.yml中的驗證器?如果是這樣,那麼你需要更多的東西來將驗證器綁定到配置文件。 – Cerad

+0

如何查看我的驗證程序是否被調用?是的,我的驗證器映射在我的validation.yml中,並且在我的表單中使用它時工作正常 – goto

回答

1

因此,雖然其真正的功能測試,我想你最好的選擇是隻搶驗證器服務:

class MyTest extends Symfony\Bundle\FrameworkBundle\Test\WebTestCase 
{ 
    public function test() 
    { 
     $client = static::createClient(); 
     $validator = $client->getContainer()->get('validator'); 

     ... 

======================================== =====================

你能解釋調用static :: get('validator')和Validation :: createValidatorBuilder之間的區別嗎?

在回答你的評論時,我不知道靜態在哪裏:你指的是從哪裏來的。你在單元測試中使用了哪些基類?但它並不重要,因爲我認爲static :: get正在訪問依賴注入容器。

所以你的問題是真的:使用Symfony 2容器和實際的組件本身有什麼區別?

需要理解的是,當您啓動Symfony 2應用程序時,會讀取各種配置文件,並在幕後發生所有類型的事件。特別是,一個名爲驗證器的服務被創建並通過諸如validation.yml之類的東西進行初始化。同樣,您的自定義驗證程序已創建並作爲依賴項傳遞給您的實體管理器。

當你僅僅使用Validation :: createValidatorBuilder時,就不會發生這種情況。沒有配置,沒有映射,沒有實體經理等。看看代碼,看看實際發生了什麼。查看組件文檔以瞭解如何直接使用它。這實際上是值得的練習,因爲它有助於理解Symfony如何連接所有東西。

+0

我可以訪問static :: get('validator')而不是我的Validation :: createValidatorBuilder() - > getValidator() ;它工作正常!非常感謝。你可以解釋調用static :: get('validator')而不是$ this-> get('validator')或Validation :: createValidatorBuilder() - > getValidator()之間的區別。 – goto

相關問題