2012-03-05 102 views
0

我有一个Symfony 2应用程序,它使用REST interace。我想执行不同环境下的集成测试。测试应该被执行:如何拥有不同配置的多个测试环境?

  • 无论是对一个真正的接口(一个特定的主机上运行)
  • 或针对样机接口(在本地主机上运行)。

如何指定执行哪个测试环境?目前我开始使用

phpunit -c app/ 

从应用程序文件夹中。但是我不想复制应用程序文件夹。

更新

具体来说,我有一个REST服务,这是负责doint REST调用,让我们称之为RestBase。在某个时候,它会建立一个URL:$urlPrefix.$restPath$urlPrefix对于dev,stage,prod环境是不同的。目前该配置在config_*.yml中完成。但是我想对不同的urlPrefix进行测试。从概念上讲我想有这样的:

phpunit -c app/ **-env=test** 

其中urlPrefixhttp://localhost:8888

phpunit -c app/ **-env=test2** 

对另一另一个环境中运行,与urlPrefix不同的设置。

汇总问题

如何在另一个环境中执行测试比test,例如test2(而不是以编程方式更改)?

回答

1

因此,您正在使用phpunit对REST API进行功能测试。

Symfony2已经提供了一种直接调用你的http内核来绕过前端控制器的方法。

所有你需要做的是延长WebTestCase类(从PHPUnit的Test_Case继承本身):

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; 

class MyControllerTest extends WebTestCase 
{ 
public function testGET() 
{ 
    // Create a new client to browse the application 
    $client = static::createClient(); 

    $crawler = $client->request('GET', '/api/v1/test'); 
    $this->assertTrue(200 === $client->getResponse()->getStatusCode()); 
} 
} 
+0

这很清楚。如何基于测试环境创建一个url前缀?例如:'$ this-> container-> getParameter(“urlPrefix”)。“/ api/va1/test”'。 – Chris 2012-03-05 10:24:22

+0

请注意,我很清楚,一般情况下如何为'urlPrefix'设置不同的值。我的问题是如何使用不同的测试环境,即如何在'test'之外的其他环境中执行测试,例如'test2'。 – Chris 2012-03-05 10:34:16

+0

只需添加一个选项数组:'$ client = static :: createClient(array('environment'=>'test2'));' – Florian 2012-03-05 13:31:49