在 phpunit 测试中覆盖 symfony TokenAuthenticator

Posted

技术标签:

【中文标题】在 phpunit 测试中覆盖 symfony TokenAuthenticator【英文标题】:Override symfony TokenAuthenticator on phpunit tests 【发布时间】:2020-08-09 08:41:53 【问题描述】:

我通过扩展 AbstractGuardAuthenticator 类创建了一个自定义令牌身份验证类,如 here 所述。我的要求是接受一个 jwt,提取它并通过检查它的 id 与工作完全正常的数据库来识别用户。

现在我需要重写它的底层方法以在 php 单元测试中使用。简单来说,绕过它并设置一个默认用户。因此,我可以在每次进行功能测试时测试 API 端点,而无需传递用户令牌。

我尝试了什么

我尝试在 test 文件夹中定义一个单独的 security.yaml 并使用它调用自定义类来覆盖,但应用程序仍然调用默认类。

路径: config/packages/test/security.yaml

security:

  firewalls:

    main:
      anonymous: lazy
      logout: ~

      guard:
        authenticators:
          - Otrium\Infrastructure\Security\TestTokenAuthenticator
        entry_point: Otrium\Infrastructure\Security\TestTokenAuthenticator

      stateless: true

到目前为止,我发现的唯一解决方案是保留匹配的 jwt 并将其作为标头值传递给每个测试。

Symfony 版本 - 5 / php 版本 - 7.4

【问题讨论】:

【参考方案1】:

您不需要覆盖 Authenticator。

您可以找到解决方案here

我在我的项目中使用了它,我不需要在每个请求中传递令牌。

【讨论】:

以上是关于在 phpunit 测试中覆盖 symfony TokenAuthenticator的主要内容,如果未能解决你的问题,请参考以下文章

phpunit随机重启测试

Symfony Doctrine 关系在 PhpUnit 测试中为空

Symfony3.4:PHPUnit并且没有可用的代码覆盖驱动程序[关闭]

如何使用 phpunit 在 Symfony 中测试控制器方法?

我的UserController的PHPunit没有覆盖所有行

运行 PHPUnit 测试时,容器参数在 Symfony 5 服务中不可用/注入