Symfony中的集成测试
我正在编写一个可重用的包,并希望对这个包与托管应用程序进行集成测试。问题是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
方法来获取服务。
我想出了问题所在。测试中使用了容器的较旧缓存版本,因此未反映捆绑包配置的更改。该命令php bin/console cache:clear --env=test
帮助重建缓存。我在原始问题中提到的方法在启动内核时不应该被调用(至少当缓存已经存在时)。
简单地做rm -rf var/cache/* –
@mike为什么总是更好?我听到了一些关于命令被弃用的事情,但仍然是。 – Sergey
您是否在内核文件中添加了包? –
@ tokeeen.com是的,我做了 – Sergey