Codeception/Symfony4 未找到环境变量:"DATABASE_URL"

Codeception/Symfony4 Environment variable not found: "DATABASE_URL"

我在 Symfony4 中有一个带有 doctrine DB 的项目,一切顺利。

我想使用 Codeception 添加一些功能和单元测试。我按照文档并将其添加到我的 functional.suite.yml:

actor: FunctionalTester
modules:
    enabled:
        - Symfony:
            app_path: 'src'
            environment: 'test'
        - Doctrine2:
            depends: Symfony
#            cleanup: true
        - \Helper\Functional
#       - Db
    step_decorators: ~        

然而,当 运行ning vendor/bin/codecept 运行 我变得丑陋:

In EnvVarProcessor.php line 131:

Environment variable not found: "DATABASE_URL".

我在文档中看不到任何其他相关内容,所以不确定我遗漏了什么。

您的 codeception.yml 配置文件是否有此部分:

params:
- .env
- .env.test
- ...

如果有,您需要检查列表中的最后一个 .env 文件并确保它具有 DATABASE_URL 变量集.

另一个解决方案是从列表中删除除您的应用程序正在使用的 .env 之外的所有文件。 (我不建议)

加载此列表中的每个文件时,它会覆盖前一个文件中存在的变量。

不幸的是,我无法解释它背后的机制,但为了解决它,我不得不将 DATABASE_URL 环境变量添加到我的 OS.

export DATABASE_URL='mysql: ...';

这对我来说似乎很奇怪的解决方案(同样,我不知道为什么 Codeception 需要这个),所以我继续挖掘。我后来发现的东西,但似乎实际上导致整个情况的是我安装 Codeception 的方式。如果你去 codeception docs 你可以阅读:

If you don't plan to do acceptance testing, you can get minimal installation of Codeception by requiring codeception/base

编辑 2020 年 7 月:有关最小安装的信息已从链接网站中删除,看起来 Codeception 不再提供该选项。

我就是这样安装的。在玩了很多之后,我在 before codeception 中提取了一个版本的代码并使用 composer require codeception/codeception --dev 安装(所以 full 版本)。以这种方式安装后我没有任何问题。