【问题标题】:Prevent Codeception from overriding Symfony classes防止 Codeception 覆盖 Symfony 类
【发布时间】:2017-12-11 02:22:07
【问题描述】:

我正在编写一些单元测试,但我遇到了一个问题,因为 Codeception 使用它自己的内部 Symfony 类,而不是使用我项目中的实际 Symfony 类。我没有在 codeception.ymlunit.suite.yml 文件中启用 Symfony 作为模块。

这似乎是 Codeception 的设计缺陷。 Symfony 类并不是一成不变的,但是通过使用 Codeception,它们被冻结了,所以我正在使用的 Symfony 版本在我运行测试时不一定匹配。

如何在运行 Codeception 测试时使用 Symfony 自己的类?

【问题讨论】:

    标签: php symfony unit-testing codeception


    【解决方案1】:

    我假设您使用的是 phar 文件或全局作曲家安装。
    本地 composer 安装和 phar 或全局安装之间的版本冲突是一个很常见的问题。

    防止它的唯一方法是将 Codeception 安装为本地 composer 依赖项,然后它将使用与您的项目相同版本的 Symfony。

    安装:composer require --dev codecept/codecept.
    运行:./vendor/bin/codecept run

    【讨论】:

    • 它仍然使用自己的类还是 Symfony 的类?我需要编辑一些 Symfony 类,这个项目永远不会收到 Symfony 更新。
    • 你的意思是像symfony/console这样的组件吗?如果您的修改是使用 composer 安装的并且是 symfony 组件的直接替换,它们也将被 Codeception 使用。
    • 如果我理解正确的话,将 Codeception 添加到 Composer 将首先加载 Symfony,因此它自己的类将被使用。
    【解决方案2】:

    作为一种解决方法,我创建了一个围绕 Codeception 的包装器,它在 Codeception 有机会加载自己的版本之前加载 Symfony 库。我不喜欢这个解决方案,因为它很混乱而且一点也不明显,因为您必须调用不同的脚本而不是 Codeception。但是,它确实有效。

    【讨论】:

      猜你喜欢
      • 2020-04-03
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 2019-12-03
      • 1970-01-01
      • 1970-01-01
      • 2019-04-03
      • 2017-05-29
      相关资源
      最近更新 更多