Laravel测试 - 迁移/刷新错误的环境

时间:2017-10-07 20:28:23

标签: php laravel testing

Laravel v5.5.14
PHPUnit v6.4.1

我有一个带有许多功能测试的Laravel应用程序。我的基础TestCase使用RefreshDatabase特征在每次测试之前触发数据库刷新,而phpunit.xml中的env变量看起来就像这样;

<php>
    <env name="APP_ENV" value="testing"/>
    <env name="DB_CONNECTION" value="sqlite"/>
    <env name="DB_DATABASE" value=":memory:"/>
    <env name="CACHE_DRIVER" value="array"/>
    <env name="SESSION_DRIVER" value="array"/>
    <env name="QUEUE_DRIVER" value="sync"/>
</php>

目的是单独保留开发mysql数据库连接并在内存中使用sqlite运行测试。尽管有这些设置(并清除缓存的配置等),数据库刷新仍会刷新mysql连接数据库。

我已查看了RefreshDatabase中的功能并调试了refreshDatabase方法,该方法已经过去了;

$this->usingInMemoryDatabase()
                        ? $this->refreshInMemoryDatabase()
                        : $this->refreshTestDatabase();

usingInMemoryDatabase总是返回false。查看该方法的内容,从DB_CONNECTION检索config时,它始终返回mysql,即使它应该被上面的env变量覆盖。

这里发生了什么?

1 个答案:

答案 0 :(得分:3)

在运行测试之前运行php artisan config:clear以清除缓存,以确保配置变量不会从错误的环境中缓存。如果这无助于使用您的IDE(例如PHPStorm)运行PHPUnit并专门选择您的项目phpunit.xml

enter image description here