【问题标题】:Make private and removed service available in tests在测试中提供私有和已删除的服务
【发布时间】:2022-01-25 11:43:31
【问题描述】:

我正在尝试使 vatin-bundle 与 Symfony 6 兼容。

但测试失败

编译容器时,“验证器”服务或别名已被删除或内联。您应该将其公开,或者直接停止使用容器并改用依赖注入。

这似乎是Symfony 6中的新功能

static::getContainer() 中的容器实际上是一个特殊的测试容器。它使您可以访问公共服务和未删除的私人服务。

validator 再次在测试中可用的首选方法是什么?

我发现的唯一方法是创建自己的别名

services:
    myvalidator:
        alias: validator
        public: true

并使用新别名。有没有更好的办法?

【问题讨论】:

    标签: php symfony symfony-dependency-injection symfony6


    【解决方案1】:

    如果服务被删除,那么无论如何都无法再访问它。这不是可见性的问题,服务不再存在。所以你需要防止服务被删除:创建别名是最好和最简单的方法。

    这已经得到维护者here的确认。

    您只能在测试期间创建别名,并且仍然可以访问原始服务。 (例如->get('validator')。创建别名后,不再删除原始服务。

    我认为这在 Symfony 6 中并不是什么新东西,但它是 Symfony 4.4 以来的新事物。尽管现在在 Symfony 6 上确实如此,因为它删除了以前不推荐使用的行为,所以事情可能已经改变了。

    【讨论】:

    • 这些测试适用于 symfony 4 和 5,所以 symfony 6 必须有所改变。在测试时,您有一个特殊的 test.conainer,它也允许私有服务。
    • 是的,您可以测试私有服务。但是不使用的服务会被删除,因此即使是私有的,您也无法访问它们。创建别名可防止编译步骤从容器中删除服务。
    • 无论如何,最简单最好的解决方案就是这样:只在测试容器上创建别名。
    猜你喜欢
    • 2021-09-29
    • 2016-10-06
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 2023-01-19
    相关资源
    最近更新 更多