zer*_*nes 8 testing phpunit laravel
我使用凭据创建了一个.env.testing文件,除了数据库的表名称不同之外,其他所有内容都与.env相同。
我尝试php artisan config:clear删除其中的缓存配置文件bootstrap/cache/config.php,但它断开了数据库连接。如果我通过运行php artisan config:cache缓存的文件重新缓存文件,则返回该文件,但是.env.testing文件中没有凭据。当我重新运行PHPUnit时,它将连接到错误的数据库,该数据库名称存储在.env中,而不是.env.testing中。
这是真的吗?最新的Laravel版本是否破坏了测试环境?
这是文档的内容:(位于此处:https : //laravel.com/docs/5.8/testing)
“您可以根据需要自由定义其他测试环境配置值。可以在phpunit.xml文件中配置测试环境变量,但是请确保在运行测试之前使用config:clear Artisan命令清除配置缓存!
另外,您可以在项目的根目录中创建一个.env.testing文件。运行PHPUnit测试或使用--env = testing选项执行Artisan命令时,此文件将覆盖.env文件。”
更新
我终于能够通过在phpunit.xml文件中添加数据库覆盖来覆盖.env中声明的数据库;.env.testing仍然无法正常工作。这些文档至少具有误导性。
这对我有用:
在phpunit.xml我必须<env name="APP_ENV" value="testing"/>在<php>块内定义以使 PhpUnit 加载.env.testing而不是.env
这似乎是Laravel文档是错误的,.env.testing是不是硬编码在Laravel或PHPUnit的任何地方,它读取任何对环境的文件APP_ENV中指定phpunit.xml。.env.phpunit如果您phpunit.xml以这种格式定义它,您甚至可以将其重命名为或其他任何名称:<env name="APP_ENV" value="phpunit"/>
小智 7
您需要在 phpunit.xml 中设置 APP_CONFIG_CACHE 变量,以避免测试和本地配置相互覆盖。
<server name="APP_ENV" value="testing"/>
<server name="APP_CONFIG_CACHE" value="cache/config-testing.php" force="true"/>
Run Code Online (Sandbox Code Playgroud)
我在Laravel v5.6中遇到了同样的问题。我.env.testing用不同的用户名,密码和数据库设置了一个文件,但是我的测试始终在主.env数据库中运行。
看起来您在运行config cache命令时需要指定测试环境。运行此命令后,它按文档中所述工作:
php artisan config:cache --env=testing
Run Code Online (Sandbox Code Playgroud)
我在使用 Laravel v7 时遇到了同样的问题。我的手在头发上已经有一段时间了,但我找到了一个解决方法。
.env.testing 对我来说是一个失败的原因。我从来没有加载它,所以我只是把所有的变量放在 phpunit.xml 中。为了让测试环境 ( php artisan test) 真正加载这些变量,我必须这样做:
首先,我必须APP_ENV在 phpunit.xml 中设置为force="true":
<php>
<server name="APP_ENV" value="testing" force="true"/>
<server name="BCRYPT_ROUNDS" value="4"/>
<server name="CACHE_DRIVER" value="array"/>
<server name="DB_CONNECTION" value="sqlite"/>
<server name="DB_DATABASE" value=":memory:"/>
<server name="MAIL_MAILER" value="array"/>
<server name="QUEUE_CONNECTION" value="sync"/>
<server name="SESSION_DRIVER" value="array"/>
<server name="TELESCOPE_ENABLED" value="false"/>
</php>
Run Code Online (Sandbox Code Playgroud)
然后我不得不跑php artisan config:clear,不是:cache。当我运行php artisan config:cache它时,它实际上不起作用。可能是因为它缓存了一次 env 并且从不根据不同的环境加载新设置。
| 归档时间: |
|
| 查看次数: |
1060 次 |
| 最近记录: |