用户测试中多个客户端的 Symfony 4.4 弃用警告已弃用,但仍存在于文档中

Posted

技术标签:

【中文标题】用户测试中多个客户端的 Symfony 4.4 弃用警告已弃用,但仍存在于文档中【英文标题】:Symfony 4.4 deprecation warning for multiple clients in user test is deprecated, still present in documentation 【发布时间】:2020-04-27 14:03:13 【问题描述】:

受影响的 Symfony 版本:4.4.0

说明 升级到 Symfony 4.4.0 后,我收到以下弃用警告: 从 Symfony 4.4 开始不推荐在内核启动时调用“Symfony\Bundle\FrameworkBundle\Test\WebTestCase::createClient()”,并将在 5.0 中抛出,请确保在调用该方法之前关闭内核。

但是,我执行与文档 (https://symfony.com/doc/current/testing/insulating_clients.html) 中相同的操作,这也给出了相同的弃用警告。没有明确的替代方案,是文档过时还是这是一个错误?

如何重现

class PagesTestCase extends WebTestCase 
     ...
     public function setUp(): void 
        parent::setUp();
        ...
        // Create clients
        self::$anonymousClient = self::createClient(array(), array(
            'HTTPS' => true,
        ));
        self::$userClient = self::createClient(array(), array(
            'php_AUTH_USER' => self::get('anonymous')->getUsername(),
            'PHP_AUTH_PW' => '***',
            'HTTPS' => true,
        ));
        self::$adminClient = self::createClient(array(), array(
            'PHP_AUTH_USER' => self::get('testuser')->getUsername(),
            'PHP_AUTH_PW' => '***',
            'HTTPS' => true,
        ));

【问题讨论】:

弃用并不意味着你不能使用它。除非你迁移到 symfony 5,否则没关系。 【参考方案1】:

您需要关闭内核。 WebTestCase extends KernelTestCase,提供静态方法self::ensureKernelShutdown()

在创建客户端之前调用它。

文档中确实仍然缺少这一点。

【讨论】:

这很令人困惑,因为 $kernel 一旦启动,就有一个关闭方法,所以你可能会想像 "$kernel->shutdown();" 那样使用它这显然与 self::ensureKernelShutdown() 不同。

以上是关于用户测试中多个客户端的 Symfony 4.4 弃用警告已弃用,但仍存在于文档中的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 4.4 metadata_cache_driver 配置键弃用通知

在 symfony 4.4 的控制器中测试模拟服务

在 Symfony 4.4 中使用注解测试控制器

从 Symfony 3.4 迁移到 Symfony 4.4 后,自定义投票器无法按预期工作

Symfony 4.4如何使用collectionType从0个字段开始

Symfony 4.4 安全性在登录后获取具有关系实体数据的用户