Laravel测试DatabaseMigrations未运行所有迁移

时间:2017-10-11 13:27:32

标签: php laravel laravel-5 phpunit

我正在使用Laravel和PHPUnit进行单元测试,我有一个类似的测试类:

class ImportServiceTest extends BaseTestCase
{
   use DatabaseMigrations;

   public function setUp()
   {
      // Parent Setup
      parent::setUp();
   }

   public function tearDown()
   {
      parent::tearDown();
   }
}

但是当我运行PHPUnit时,我的测试数据库只迁移了70个表而不是普通的160.它也没有迁移任何以2017为前缀的迁移。只有那些以2016为前缀的那些。

我想知道是否有人遇到过这个问题?

这是我的phpunit.xml:

<?xml version="1.0" encoding="UTF-8"?>

<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="true"
         stopOnError="true"
         stopOnIncomplete="true"
         stopOnSkipped="false"
         stopOnRisky="false"
         syntaxCheck="true"
         timeoutForSmallTests="1"
         timeoutForMediumTests="10"
         timeoutForLargeTests="60"
         verbose="true"
         bootstrap="bootstrap/autoload.php">
    <testsuites>
        <testsuite name="Application Test Suite">
            <testsuite name="Modules Test Suite">
                <directory suffix="Test.php">./Modules/*/Tests</directory>
            </testsuite>
            <!--<directory suffix="Test.php">./tests</directory>-->
        </testsuite>
    </testsuites>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="APP_DEBUG" value="true"/>
        <env name="APP_LOG_LEVEL" value="debug"/>
        <env name="DB_CONNECTION" value="testing"/>
        <env name="APP_NAME" value="Central"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="QUEUE_DRIVER" value="redis"/>
        <env name="BROADCAST_DRIVER" value="redis"/>
        <env name="REDIS_HOST" value="127.0.0.1"/>
        <env name="REDIS_PORT" value="6379"/>
    </php>
    <filter>
        <whitelist processUncoveredFilesFromWhitelist="false">
            <directory suffix=".php">./tests</directory>
            <directory suffix=".php">./tests/coverage</directory>
            <directory suffix=".php">./database/migrations</directory>
            <directory suffix=".php">./src</directory>
            <directory>./vendor</directory>
            <exclude>
                <directory suffix=".php">./tests</directory>
                <directory suffix=".php">./tests/coverage</directory>
                <directory suffix=".php">./src/resources</directory>
                <directory>./vendor</directory>
            </exclude>
        </whitelist>
    </filter>
    <!--<logging>-->
    <!--<log type="coverage-html"-->
    <!--target="./tests/coverage/"-->
    <!--lowUpperBound="35"-->
    <!--highLowerBound="70"/>-->
    <!--</logging>-->
    <groups>
        <exclude>
            <group>performance</group>
        </exclude>
    </groups>
</phpunit>

我很难过,因为我之前使用过PHPUnit而且从未见过这种行为。

我的测试连接设置如下:

         # Testing Database Credentials - set in production environment or .env
    'testing' => [
        'driver' => 'mysql',
        'host' => env('DB_TESTING_HOST', 'localhost'),
        'port' => env('DB_TESTING_PORT', '3306'),
        'database' => env('DB_TESTING_DATABASE', 'testing'),
        'username' => env('DB_TESTING_USERNAME', 'homestead'),
        'password' => env('DB_TESTING_PASSWORD', 'secret'),
        'charset' => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
    ],

谢谢!

1 个答案:

答案 0 :(得分:1)

我和你有同样的问题,并且最初难倒。但我解决了。

在我给出解决方案之前,让我解释一下我的设置:

  1. 我不使用“内存”sqlite数据库进行测试。我刚开始,但是当我决定开始严格使用PHPUnit的PostgreSQL数据库时,我遇到了这个问题。

  2. 我使用迁移根据应用程序环境对测试数据进行种子处理,这样我就能保证事情按特定顺序发生,所以我知道当时存在哪些列。

  3. 就我而言,发生的事情是我的一次迁移是抛出一个从未显示的异常。因此,工匠只会停止迁移,phpunit会继续。我发现我正在为我的'local'环境播种,而不是我的'testing'环境。在确保'testing'环境适当播种后(不一定与'local'相同),请注意,一切都开始了。