2016-09-22 1 views
0

В тесте, которое расширяет WebTestCase, я хочу что-то проверить, что зависит от прохождения параметров GET.Symfony2: передать параметры GET для функционального теста phpunit

Решение для параметров 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? Параметр $ params вашего getUrl - что должно туда идти? Мой массив с параметрами GET? –

+1

Если у вас есть маршрут в Symfony, определенный следующим образом: @Route ("/ edit/{id}", name = "edit"), $ params из getUrl() должен содержать массив ['id'] => 99. В ваших тестах вы отправляете параметр запроса, он отличается. –