9

我在让 Laravel 为我的测试用例加载正确的 .env 文件时遇到了一些问题。我正在使用 PHPUnit,并在 phpunit.xml 中设置了以下 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');

就像这里的线程中建议的那样

有谁知道可能出了什么问题?

4

3 回答 3

7

我的问题非常相似。环境文件 .env.testing 根本没有被读取。我试图在我的测试文件中到处放一些 var_dump,一切都很好,但即使是 var_dump(env("APP_NAME")) 也是空的。

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

于 2019-02-07T20:35:32.050 回答
0

要加载.env.testing文件,您必须执行 artisan 命令--env=testing

于 2021-10-27T14:04:22.473 回答
-2

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

于 2021-05-13T06:45:30.107 回答