2017-11-10 147 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