Symfony 控制器作为测试速度的服务问题
Symfony Controller as a service issue with test speed
当我使用以下配置(一些信息已编辑)时,运行 我们在 Symfony 应用程序上的功能测试套件出现问题:
App\Bundle\Controller\Controller:
arguments:
- '@datatable'
- '@filtermanager'
- '@App\Bundle\Service\FilterService'
- '@translator'
tags: ['container.service_subscriber']
calls: [['setContainer', ['@Psr\Container\ContainerInterface']]]
我们目前是 运行 Symfony 3.4,但是很快就会升级到 4.4,因此尝试编写兼容的代码,因此将控制器声明为服务并使用 DI 来获取服务而不是从容器中获取。这样做时,我们注意到我们无法访问某些 Symfony 方法,例如 render()
、createForm()
、getDoctrine()
等,因为这些方法需要容器。
在 Google 上进行了长时间的讨论后,我遇到了 ,其中提到自动装配通常会调用设置容器方法(就像我的代码示例的最后一行)。这允许控制器使用那些特定的 Symfony 方法,因为它可以访问容器的精简版本。
无论如何,在执行上述操作时,它使我们的功能测试套件从需要 12 分钟缩短到 1-3 小时之间的任何时间。到目前为止,还没有针对控制器或与此代码有关的任何功能测试。我还注意到手动测试行为时没有性能障碍。
我也试过以下方法:
App\Bundle\Controller\Controller:
autowire: true
因为我们确实启用了自动装配,但仅限于一个目录。在执行上述操作时,代码都可以正常运行,但是测试仍然花费了同样长的时间
我希望有人能解释为什么会发生这种情况,或者可能是解决方法的答案。我想尝试避免手动注入 FormFactory
和 EntityManager
之类的东西,因为当这些辅助方法可用时它似乎有点毫无意义。
TIA
正如其他地方提到的几个帖子,发生的错误是由于 jms/di-extra-bundle。当我们删除它时,测试速度大大提高
当我使用以下配置(一些信息已编辑)时,运行 我们在 Symfony 应用程序上的功能测试套件出现问题:
App\Bundle\Controller\Controller:
arguments:
- '@datatable'
- '@filtermanager'
- '@App\Bundle\Service\FilterService'
- '@translator'
tags: ['container.service_subscriber']
calls: [['setContainer', ['@Psr\Container\ContainerInterface']]]
我们目前是 运行 Symfony 3.4,但是很快就会升级到 4.4,因此尝试编写兼容的代码,因此将控制器声明为服务并使用 DI 来获取服务而不是从容器中获取。这样做时,我们注意到我们无法访问某些 Symfony 方法,例如 render()
、createForm()
、getDoctrine()
等,因为这些方法需要容器。
在 Google 上进行了长时间的讨论后,我遇到了
无论如何,在执行上述操作时,它使我们的功能测试套件从需要 12 分钟缩短到 1-3 小时之间的任何时间。到目前为止,还没有针对控制器或与此代码有关的任何功能测试。我还注意到手动测试行为时没有性能障碍。
我也试过以下方法:
App\Bundle\Controller\Controller:
autowire: true
因为我们确实启用了自动装配,但仅限于一个目录。在执行上述操作时,代码都可以正常运行,但是测试仍然花费了同样长的时间
我希望有人能解释为什么会发生这种情况,或者可能是解决方法的答案。我想尝试避免手动注入 FormFactory
和 EntityManager
之类的东西,因为当这些辅助方法可用时它似乎有点毫无意义。
TIA
正如其他地方提到的几个帖子,发生的错误是由于 jms/di-extra-bundle。当我们删除它时,测试速度大大提高