2014-12-02 85 views
2

我有兩個字段的表單。提交後,將顯示該表單的相同控制器的重定向。symfony 2中的測試表單phpunit

的方法如下:

public function chartsAction($path, Request $request) 
{ 
    // display form 

    if(isset($_POST)) 
    { 
     // handle form submission 
    } 
} 

當它不是一個POST請求,則URL爲charts/

當它是一個POST請求時,該URL是例如charts/dateFrom/2013-08/dateTo/2014-02,所以這是方法的$ path參數,並且兩個變量取決於表單。


現在我想測試這個。問題是表單重定向給了我相同的圖表/網站。它只是不會爲路由添加$ path參數。這是怎麼回事?我的測試方法:

public function testChartsAction() 
    { 
     $crawler = $this->client->request('GET', '/charts', [], [], $this->credintials); 

     $form = $crawler->selectButton('dateChooser[Choose]')->form([ 
      'dateChooser[dateFrom]' => '2014-08', 
      'dateChooser[dateTo]' => '2014-12', 
     ]); 
     $this->client->submit($form); 
     $crawler = $this->client->followRedirect(); 

     $this->assertTrue($this->client->getResponse()->isRedirect('/charts/dateFrom/2014-08/dateTo/2014-12')); 
     $this->assertTrue($this->client->getResponse()->isSuccessful()); 
    } 

第一個斷言讓我錯誤。

+0

嘗試測試isRedirect的followRedirect方法之前 – Matteo 2014-12-02 21:27:57

+0

它仍然給我/圖表重定向從形式,沒有GET參數。 – khernik 2014-12-02 21:31:57

回答

2

我想你應該跳過「isRedirect」斷言。在表單處理程序,您可以設置一個成功的提示信息,將在響應頁面呈現:

$client = $this->makeClient(true); 
$client->followRedirects(); 
$crawler = $client->request('GET', $url); 

$form = $crawler->filter('#formID')->form(); 
$form->setValues(array(
    "formsample[firstname]" => "test firstname", 
    "formsample[lastname]" => "test lastname" 
)); 

$client->setServerParameter("HTTP_X-Requested-With" , "XMLHttpRequest"); 
$client->submit($form); 
$response = $client->getResponse(); 
$this->assertContains('Your data has been saved!', $response->getContent());