我正在尝试做的是功能测试我的捆绑(可重复使用的捆绑)。更深入:
/my/url
MyParamConverter
并将请求转换为MyObject
的实例my.event
根据文档,我应该扩展Symfony\Bundle\FrameworkBundle\Test\WebTestCase
并创建一个新客户端:
$client = static::createClient();
$crawler = $client->request('GET', '/my/url');
这样做,哪些捆绑包被加载?如何指定要在环境中使用的配置文件(假设它默认为test
)?
编辑:好的,是时候更好地解释一下我的问题。 AcmeMessagingBundle说,我正在拧一个可重复使用的捆绑包。现在我想进行功能测试。场景是对/my/url
的调用:
public function testReceiveApiRoute()
{
$client = $this->createClient();
/** @var $route \Symfony\Component\Routing\Route */
$route = $client->getContainer()->get('router')
->getRouteCollection()->get('acme_messaging_receive');
$this->assertNotNull($route);
$this->assertEquals('POST', $route->getRequirement('_method'));
$this->assertEquals('acme_messaging.controller.api:receive',
$route->getDefault('_controller'));
}
/**
* @depends testReceiveApiRoute
*/
public funcion testReceiveApiWorkflow()
{
$client = $this->createClient();
// Make a POST request
$request = Request::create('/my/route', 'POST', array(
'a' => 'value'
));
// Request is convered in MyObject instance and that my.event is fired
}
通过此测试,加载app/config_test.yml
(例如“主配置文件”)。问题是:
不应该测试“隔离”,意味着不使用主配置文件?如果我的包被另一个空app/config_test.yml
的人测试怎么办?测试会失败......
测试也会因前缀路径而失败。如果使用前缀导入AcmeMessagingBundle中的routing.xml
,则testReceiveApiWorkflow
将失败!
答案 0 :(得分:3)
使用WebTestCase
会将您自己的AppKernel
用于测试环境。
您可以为您的应用添加新的环境,并在WebTestCase
中使用它,如下所示:
$client = static::createClient(array('environment' => 'new_env'));
更安全的做法是在捆绑包的测试中创建一个应用程序。 您可以使用JMSCommandBundle为您生成它。 您还可以使用此技巧创建查看捆绑包的sanboxed应用程序:https://github.com/schmittjoh/JMSPaymentCoreBundle/tree/master/Tests/Functional