如何在功能测试期间配置 Symfony 5 服务参数?

How to configure Symfony 5 service parameters during functional test?

我的一个被测路由使用了一个服务,这个服务在 services.yml 中设置了一个参数。

在生产模式下,一切都按预期工作,但我想在 运行 测试时更改 $my_arg 的值。

我该怎么做?如何在功能测试期间设置 Symfony 5 服务参数的值?

这是我的 services.yml 配置的摘录:

parameters:
    app.my_param: 'foo'

services:
    ...
    App\Service\MyService:
        arguments:
            $my_arg: '%app.my_param%'

如果值是环境依赖,我会使用环境变量来存储它。

您甚至可以设置一个默认值,以防您只需要在特定环境中覆盖它。

parameters:
    env(APP_MY_PARAM): 'foo'
    app.my_param: '%env(APP_MY_PARAM)%'

services:
    ...
    App\Service\MyService:
        arguments:
            $my_arg: '%app.my_param%'

您现在只需设置环境变量 APP_MY_PARAM 即可更改应用程序行为。

完成此测试的最简单方法是创建一个 .env.test 文件:

#.env.test
APP_MY_PARAM=bar

有了这个,$my_arg 将在测试期间设置为 "bar",如果不将环境变量设置为其他任何值,则默认设置为 "foo"