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

时间:2018-03-01 12:06:59

标签: symfony testing

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

当然我想测试这些组件。然而,在关于功能测试的示例中,需要实际路由来进行虚假测试请求。但是我的BarController这里纯粹是内部的,没有附加路线。我该如何测试这个控制器?

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

似乎工作正常。