【问题标题】:.env.testing file ignored when running phpunit tests for a laravel app为 laravel 应用程序运行 phpunit 测试时忽略 .env.testing 文件
【发布时间】:2019-10-28 20:34:59
【问题描述】:

注意:我咨询了其他类似的问题,但他们都解决了清除缓存、在 xml 中设置 APP_ENV 和/或创建 .env.testing 的问题。


Laravel 版本"laravel/framework": "5.8.*",

我有标准的.env 文件

APP_ENV=local
DB_CONNECTION=mysql

我已克隆标准的.env 文件并保存为.env.testing,然后更改为

APP_ENV=testing
DB_CONNECTION=mongodb

从控制台,从项目的根目录内部,我正在尝试使用

php artisan config:cache && vendor/bin/phpunit

问题在于 Laravel/PHPUnit 仍在使用 .env 文件,而不是预期的 .env.testing。这就是证据

TypeError: 传递给 Jenssegers\Mongodb\Query\Builder::__construct() 的参数 1 必须是 Jenssegers\Mongodb\Connection 的实例,给定的 Illuminate\Database\MySqlConnection 的实例,

这是实际的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="Unit">
            <directory suffix="Test.php">./tests/Unit</directory>
        </testsuite>

        <testsuite name="Feature">
            <directory suffix="Test.php">./tests/Feature</directory>
        </testsuite>
    </testsuites>
    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./app</directory>
        </whitelist>
    </filter>
    <php>
        <server name="APP_ENV" value="testing"/>
        <server name="BCRYPT_ROUNDS" value="4"/>
        <server name="CACHE_DRIVER" value="array"/>
        <server name="MAIL_DRIVER" value="array"/>
        <server name="QUEUE_CONNECTION" value="sync"/>
        <server name="SESSION_DRIVER" value="array"/>
    </php>
</phpunit>

所以,我请教一个调试和修复的建议

【问题讨论】:

  • 你用的是哪个版本的 laravel?
  • 我最迟"laravel/framework": "5.8.*",

标签: laravel phpunit


【解决方案1】:

我发现了这个问题:https://github.com/sebastianbergmann/phpunit/issues/2353

所以我尝试更改 .xml 文件的这一部分来强制我的配置。

它有效。注意所有行现在都附加了force="true"

    <server name="APP_ENV" value="testing"  force="true"/>
    <server name="BCRYPT_ROUNDS" value="4" force="true"/>
    <server name="CACHE_DRIVER" value="array" force="true"/>
    <server name="MAIL_DRIVER" value="array" force="true"/>
    <server name="QUEUE_CONNECTION" value="sync" force="true"/>
    <server name="DB_CONNECTION" value="mongodb_testing" force="true"/>
    <server name="SESSION_DRIVER" value="array" force="true"/>

【讨论】:

    【解决方案2】:

    我遇到了这个问题,我尝试更新 phpunit.xml 以使用

    &lt;env /&gt; 而不是&lt;server /&gt;

    它可以工作(Laravel 5.7)

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

    【讨论】:

      猜你喜欢
      • 2017-11-06
      • 2015-09-29
      • 1970-01-01
      • 2011-11-23
      • 2023-03-05
      • 2016-09-14
      • 1970-01-01
      • 2017-10-19
      • 2014-03-08
      相关资源
      最近更新 更多