为laravel应用运行phpunit测试时忽略.env.testing文件

时间:2019-06-14 08:20:15

标签: laravel phpunit

  

NB:我咨询了其他类似的问题,但是所有这些问题都解决了清除缓存,在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>

所以,请提出调试和修复的建议

2 个答案:

答案 0 :(得分:2)

我发现了这个问题: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"/>

答案 1 :(得分:0)

我遇到了这个问题,我尝试更新 phpunit.xml 以代替 它有效(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>