2017-11-10 207 views
0

我正在编写一个可重用的包,并希望对这个包与托管应用程序进行集成测试。问题是Symfony既没有调用我的包的DependencyInjection\Extension::load也没有调用DependencyInjection\Configuration::getConfigTreeBuilder方法,因此bundle的服务配置没有加载,服务也没有正确构建。我如何让Symfony在测试中加载所有内容,就好像它是一个真正的请求?Symfony中的集成测试

这里是我的测试:

namespace Tests\AclAgentBundle; 

use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; 

class IntegrationTest extends KernelTestCase 
{ 
    public function testAgentExistence() 
    { 
     $container = static::bootKernel()->getContainer(); 

     $service = $container->get('test.Foo\Bar\Baz'); 

    //...assertions... 
} 

test.Foo\Bar\Baz是服务的别名,在主机应用程序的配置声明如下

services: 
    test.Foo\Bar\Baz: '@Foo\Bar\Baz' 

用于通过容器在测试get方法来获取服务。

+0

您是否在内核文件中添加了包? –

+0

@ tokeeen.com是的,我做了 – Sergey

回答

0

我想出了问题所在。测试中使用了容器的较旧缓存版本,因此未反映捆绑包配置的更改。该命令php bin/console cache:clear --env=test帮助重建缓存。我在原始问题中提到的方法在启动内核时不应该被调用(至少当缓存已经存在时)。

+0

简单地做rm -rf var/cache/* –

+0

@mike为什么总是更好?我听到了一些关于命令被弃用的事情,但仍然是。 – Sergey