无法在Laravel 5.5中将APP_ENV设置为``测试''以进行单元测试

mir*_*nis 1 phpunit laravel

我在Homestead-7上使用Laravel 5.5,phpunit 6.5.5(我认为)。

我正在尝试本教程:https : //laravel-news.com/your-first-laravel-application(这应该告诉您很多我在框架方面的经验)

测试失败(由于TokenMismatchException),尽管我尝试了许多将其APP_ENV设置为的方法local,但我设法找出了设置为该变量的根本原因testing

最后,让我克服了这个问题的是设置变量,如下所示:

APP_ENV=testing vendor/bin/phpunit
Run Code Online (Sandbox Code Playgroud)

然后,测试成功完成。

我的问题是,我在做什么错?上述破解显然不是最好的方法。必须有一种正确执行此操作的方法。

更新资料

内容phpunit.xml

<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="vendor/autoload.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false">
    <testsuites>
        <testsuite name="Feature">
            <directory suffix="Test.php">./tests/Feature</directory>
        </testsuite>

        <testsuite name="Unit">
            <directory suffix="Test.php">./tests/Unit</directory>
        </testsuite>
    </testsuites>
    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./app</directory>
        </whitelist>
    </filter>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="QUEUE_DRIVER" value="sync"/>
        <env name="DB_CONNECTION" value="sqlite"/>
        <env name="DB_DATABASE" value=":memory:"/>
    </php>
</phpunit>
Run Code Online (Sandbox Code Playgroud)

预先感谢您的宝贵时间。

jdu*_*unk 9

Laravel文档中

当通过运行测试时phpunittesting由于phpunit.xml文件中定义了环境变量,Laravel将自动将配置环境设置为。

...所以我敢打赌,您的phpunit.xml文件丢失或配置错误。它应该在您项目的根目录中,并应包含以下内容:

<php>
    <env name="APP_ENV" value="testing"/>
    ...
</php>
Run Code Online (Sandbox Code Playgroud)

如果您确实phpunit.xml在正确的位置有一个文件,并且确实包含上面的部分,但无法使用,请尝试清除配置缓存:

php artisan config:clear
Run Code Online (Sandbox Code Playgroud)

如果仍然不能解决问题,那么我将检查phpunit.xml文件是否有异常,例如被错误命名或包含语法错误。

这是原始文件的链接phpunit.xml,以帮助您在需要时还原它。

  • 只想说谢谢@jdunk!我有一个星期的问题,失去了理智。`php artisan config:clear`确实很不错,很合理! (2认同)