Laravel 5.8 .env.testing文件不起作用

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仍然无法正常工作。这些文档至少具有误导性。

Den*_*app 7

这对我有用:

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)


rac*_*erp 5

我在Laravel v5.6中遇到了同样的问题。我.env.testing用不同的用户名,密码和数据库设置了一个文件,但是我的测试始终在主.env数据库中运行。

看起来您在运行config cache命令时需要指定测试环境。运行此命令后,它按文档中所述工作:

php artisan config:cache --env=testing
Run Code Online (Sandbox Code Playgroud)

  • 如果我运行“php artisan config:cache --env=testing”,那么本地服务器将使用“testing”环境。但是如果我运行 `php artisan config:cache --env=local` 那么 phpunit 将使用 .env 而不是 .env.testing (3认同)
  • 请注意,一旦您再次运行 ``php artisan config:cache``` (不带 env 标志),您将回到使用常规环境,直到执行 ``php artisan config:cache --env=testing` ``再一次。它是当前位于 ```bootstrap/cache/config.php``` 中的任何内容。 (3认同)
  • 不幸的是,这对我没有用。 (2认同)

Ken*_*Ken 5

我在使用 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 并且从不根据不同的环境加载新设置。

  • `php artisan config:clear` 对我有用。谢谢! (2认同)