【问题标题】:Where to put tests testing the configuration in the YAML files在 YAML 文件中测试配置的位置
【发布时间】:2019-07-16 12:50:55
【问题描述】:

我正在 Symfony(版本 4.2.3)中开发一个应用程序,并且还使用了来自 Sonata 项目以及 API Platform 的一些捆绑包。 我们有 4 个具有不同权限的不同用户角色。 API 是只读的,应由ROLE_USER 访问,但ROLE_USER 不得访问管理区域。其他角色应访问管理区域。

我已经在文件config/packages/security.yaml 中设置了防火墙和访问控制路径,创建了我的自定义安全处理程序VoterSecurityHandler 并在config/packages/sonata_admin.yaml 中使用它:

sonata_admin:
    security:
        handler: sonata.admin.security.handler.voter

安全处理程序注册在config/services.yaml

sonata.admin.security.handler.voter:
    class: App\Security\Handler\VoterSecurityHandler
    arguments: ["@security.authorization_checker", ['ROLE_SUPER_ADMIN']]

我使用LiipFunctionalTestBundle 编写了测试,并为不同用户提供了数据夹具,以检查他们的权限是否得到正确处理。

我正在尝试遵循最佳实践并将整个应用程序结构从src/ 映射到目录tests/。因为我有src/Security/Handler/VoterSecurityHandler.php,所以我创建了tests/Security/Handler/TestVoterSecurityHandler.php

但是VoterSecurityHandler 应该管理奏鸣曲管理员的权限,而我实际上正在测试config/packages/security.yaml 中的配置设置。

把所有的测试都放在上面提到的类里感觉不对,但是我想知道我应该把这种“冒烟测试”放在哪里?

我的问题:
在 YAML 文件中测试配置的测试应该放在哪里?

【问题讨论】:

    标签: php symfony yaml sonata phpunit


    【解决方案1】:

    最好的做法是将测试文件放在与您的 src 相同的架构下,但这并不意味着您不能编写其他测试文件。
    如果你没有控制器,直接放到tests下,随便起个名字(FirewallTest?)

    我个人使用专门的功能测试来测试不同角色的不同路由,并且只检查我是否得到 403 / 200。

    正如您在documentation 中看到的,他们将文件直接置于测试之下:tests/ApplicationAvailabilityFunctionalTest.php

    【讨论】:

    • 关于你答案的第二部分,你有SecurityController吗?因为我的应用程序中根本没有控制器。 API 端点是用注释定义的,对于管理区域,我有管理类。否则这是个好主意。
    • 最好的做法是将测试文件放在与你的src相同的架构下,但这并不意味着你不能编写其他测试文件。如果你没有控制器,直接放到tests下,随便起个名字(FirewallTest?)
    • 感谢您的最后评论。它比您的答案要好得多,因为它实际上回答了问题。如果您编辑概述此内容的答案,我会赞成并接受它(如果同时没有更好的答案)。
    • src/ 的正下方有一个文件Kernel.php,它是在引导Symfony 项目时自动生成的。它读取packages 下的所有设置。所以现在我很想把我的测试放在KernelTest.php
    • 不,这意味着您正在测试内核。更新我的答案
    猜你喜欢
    • 1970-01-01
    • 2016-02-05
    • 2020-05-07
    • 2014-12-29
    • 1970-01-01
    • 2018-12-18
    • 2021-03-25
    • 1970-01-01
    • 2020-11-02
    相关资源
    最近更新 更多