我用我的凭据创建了一个.env.testing文件,除了数据库的不同表名之外,所有内容都与.env相同。
我尝试了php artisan config:clear,它删除了bootstrap/cache/config.php中的缓存配置文件,它破坏了数据库连接。如果我通过运行php artisan config:cache重新缓存该文件,则缓存的文件将返回,但没有.env.testing文件中的凭据。当我重新运行PHPUnit时,它连接到错误的DB,即存储在.env而不是.env.testing中的DB名称。
这是真的吗?最新的Laravel版本是否破坏了测试环境?
下面是文档所读的内容:(在这里找到:https://laravel.com/docs/5.8/testing)
“您可以根据需要定义其他测试环境配置值。测试环境变量可以在phpunit.xml文件中配置,但请确保在运行测试之前使用config:clear命令清除配置缓存!
此外,您还可以在项目的根目录中创建一个.env.testing文件。当运行.env测试或使用--env=test选项执行Artisan命令时,该文件将覆盖PHPUnit文件。
更新
我终于能够通过在.env文件中添加数据库覆盖来覆盖phpunit.xml中声明的数据库;.env.testing仍然无法工作。医生们至少有误导性。
发布于 2019-07-04 18:06:10
我对LaravelV5.6也有同样的问题。我设置了一个具有不同用户名、密码和数据库的.env.testing文件,但是我的测试总是在主.env数据库中运行。
在运行config缓存命令时,似乎需要指定测试环境。运行此命令后,它按照文档中的描述工作:
php artisan config:cache --env=testing发布于 2020-04-28 22:20:54
这就是对我有用的东西:
在phpunit.xml中,我不得不在<php>块中定义<env name="APP_ENV" value="testing"/>,以使PhpUnit加载.env.testing而不是.env
看起来,Laravel是错误的,而且.env.testing在Laravel或PhpUnit中的任何地方都不是硬编码的,它读取phpunit.xml中指定的任何APP_ENV的环境文件。您甚至可以将它重命名为.env.phpunit或其他任何东西,如果您以这种格式在phpunit.xml中定义它:<env name="APP_ENV" value="phpunit"/>
发布于 2020-08-31 11:12:52
我和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>然后我不得不运行php artisan config:clear,而不是:cache。当我运行php artisan config:cache时,它实际上无法工作。可能是因为它缓存了env一次,并且从不根据不同的环境加载新的设置。
https://stackoverflow.com/questions/56605551
复制相似问题