2016-09-22 97 views
0

在擴展WebTestCase的測試中,我想測試一些東西,這取決於傳遞GET參數。Symfony2:爲phpunit功能測試傳遞GET參數

一種POST參數解決方案可以在這裏找到: Symfony2 Functional test: Passing form data directly

但是,如果我用這個模擬的GET這是行不通的。

測試代碼:

// given 
    $client = static::createClient(); 
    $paramValue = 'frwkuh437iwaw'; 

    // when 
    $client->request(
     'GET', 
     '/', 
     ['paramName' => $paramValue], 
     [], 
     [ 
      'HTTP_Host'   => 'boys2go.com', 
      'REMOTE_ADDR'   => '127.0.0.1', 
      'HTTP_X-FORWARDED-FOR' => '127.0.0.1', 
     ] 
    ); 

在類部分,他們在那裏進行了評估:

 $crossSaleParametersValue = $requestStack 
      ->getCurrentRequest() 
      ->query->get('paramName'); 

if (!empty($crossSaleParametersValue)) { 
      echo 'crossSale'; 
} 

大家有一個想法,我怎麼能傳給我的GET參數?

在'/'之後加入它們的骯髒嘗試都不起作用。

我怎樣才能讓我的GET參數進入我的測試?

回答

2

一個解決辦法是:

// Preferable, write this method in a parent class (that extends abstract 
// class WebTestCase) to be used in other tests too 
protected static function getUrl($route, $params = array()) 
{ 
    return self::getKernel()->getContainer()->get('router')->generate($route, $params, UrlGeneratorInterface::ABSOLUTE_URL); 
} 

public function testDemo() { 
    $client = static::createClient(); 
    $paramValue = 'frwkuh437iwaw'; 
    $url = $this->getUrl('route_name'); 

    // when 
    $client->request(
     'GET', 
     $url . '?paramName=' . $paramValue, 
     [], 
     [], 
     [ 
      'HTTP_Host'   => 'boys2go.com', 
      'REMOTE_ADDR'   => '127.0.0.1', 
      'HTTP_X-FORWARDED-FOR' => '127.0.0.1', 
     ] 
    ); 
} 
+0

是什麼,而不調用的getURL只是連接字符串之間的區別? getUrl的$ params參數 - 應該去那裏?我的數組與GET參數? –

+1

如果您在Symfony中定義瞭如下的路由:@Route(「/ edit/{id}」,name =「edit」),getUrl()中的$ params應該包含一個數組['id'] => 99。在你的測試中,你發送一個查詢參數,這是不同的。 –