Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Symfony 2中测试无路由的内部控制器_Symfony_Testing - Fatal编程技术网

如何在Symfony 2中测试无路由的内部控制器

如何在Symfony 2中测试无路由的内部控制器,symfony,testing,Symfony,Testing,我试图通过将模板和控制器代码重构为可重用组件来减少冗余代码,然后通过其他模板中的render(controller('AppBundle:Foo/Bar:baz'))构造使用这些组件 当然,我想测试这些组件。然而,在有关功能测试的示例中,需要实际的路由来发出虚假的测试请求。但是我的BarController在这里纯粹是内部的,没有连接到它的路由。如何测试此控制器 创建虚拟路由并不总是可能的,因为某些参数是无法通过URL传递的模型对象。我这样做是错误的吗?如果控制器被设置为服务,那么它们可以很容易

我试图通过将模板和控制器代码重构为可重用组件来减少冗余代码,然后通过其他模板中的
render(controller('AppBundle:Foo/Bar:baz'))
构造使用这些组件

当然,我想测试这些组件。然而,在有关功能测试的示例中,需要实际的路由来发出虚假的测试请求。但是我的
BarController
在这里纯粹是内部的,没有连接到它的路由。如何测试此控制器


创建虚拟路由并不总是可能的,因为某些参数是无法通过URL传递的模型对象。我这样做是错误的吗?

如果控制器被设置为服务,那么它们可以很容易地进行测试,就像任何其他类都可以进行单元测试一样。甚至在Symfony 3.3开始默认为他们提供服务之前,我已经修改了我自己的一些,以便让他们能够像这样更容易地进行测试。

服务方法听起来不错,但我现在只是这样做:

self::$kernel->getContainer()->get('router')->getContext()->setParameter('_locale', 'en');

$controller = new MyController();
$controller->setContainer(self::$kernel->getContainer());

$response = $controller->myAction($arg1, $arg2, $argWhatever);

// assertions here

似乎工作正常。

这是一个选项,或者即使它们没有注册为服务,在功能测试中,您应该能够构建它们并将容器(从功能测试客户端的内核)注入它们。如果没有实际请求,您如何正确设置环境?具体地说,我在生成路由URL时遇到了一个细枝错误,因为缺少
\u locale
参数