2016-09-22 63 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。在你的测试中,你发送一个查询参数,这是不同的。 –