Laravel PHPUnit加载.env.testing文件

时间:2017-06-05 16:46:17

标签: php laravel phpunit laravel-dotenv

我在让Laravel为我的测试用例加载正确的.env文件方面遇到了一些问题。 我在phpunit.xml中使用PHPUnit和以下var设置:

<?xml version="1.0" encoding="UTF-8"?>
    <phpunit backupGlobals="false"
     backupStaticAttributes="false"
     bootstrap="bootstrap/autoload.php"
     colors="true"
     convertErrorsToExceptions="true"
     convertNoticesToExceptions="true"
     convertWarningsToExceptions="true"
     processIsolation="false"
     stopOnFailure="false">
    <testsuites>
        <testsuite name="Application Test Suite">
            <directory suffix="Test.php">./tests</directory>
        </testsuite>
    </testsuites>
    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./app</directory>
            <exclude>
                <file>./app/Http/routes.php</file>
            </exclude>
        </whitelist>
    </filter>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="DB_CONNECTION" value="sqlite"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="QUEUE_DRIVER" value="sync"/>
    </php>
</phpunit>

在我的.env.testing文件中,我有:

APP_ENV=testing
DB_CONNECTION=sqlite

我在config / database.php下设置了他的连接:

'sqlite' => [
     'driver' => 'sqlite',
     'database' => ':memory:',
     'prefix' => ''
]

它只是没有加载.env.testing文件。如果我在TestCase.php中执行此操作:

dd(env('APP_ENV'));

我仍然从我的.env文件中获得“开发”

我也尝试过使用:

$app->loadEnvironmentFrom('.env.testing');

与线程here

中的建议相同

有没有人知道可能出现什么问题?

3 个答案:

答案 0 :(得分:1)

我的问题非常相似。完全未读取Env文件.env.testing。 我尝试将一些var_dump放到测试文件中的所有位置,一切正常,但即使是var_dump(env(“ APP_NAME”))也为空。

我想输入一个“ php artisan config:clear”,一切恢复正常。 不知道我做了什么,但是对我有用:)

答案 1 :(得分:0)

根据documentation for 5.2,您应在env中设置phpunit.xml个变量。

因此,要将数据库连接设置为sqlite,您应该添加:

<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>

<php></php>标记内。

希望这有帮助!

答案 2 :(得分:0)

您是在运行功能测试还是单元测试?我认为单元测试应该只在模拟上工作,而功能测试可能会持续到数据库中。