在Laravel中测试后数据库被擦除

时间:2017-12-09 07:37:53

标签: laravel unit-testing testing laravel-5 phpunit

我是测试的新手,所以我正在学习一门教程。我设置的数据库设置如下:

'sqlite' => [
            'driver'   => 'sqlite',
            'database' => ':memory:',
            'prefix'   => '',
        ],

在phpunit.xml中我做了如下配置:

<php>
        <env name="APP_ENV" value="testing"/>
        <env name="DATABASE_CONNECTION" value="sqlite"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="QUEUE_DRIVER" value="sync"/>
    </php>

我不确定发生了什么,我使用工厂创建的数据库种子总是丢失,数据库表也只剩下一个迁移表。

所以发生了什么,我该如何解决?

2 个答案:

答案 0 :(得分:0)

我打算将其作为评论发布,但由于缺乏声誉,我无法这样做。

你可以尝试解决当前问题的事情: -

  • 检查 .env 文件。数据库配置必须适合加入连接。
  • 检查 laravel.log 文件,以查看测试期间生成的错误。
  • 检查迁移文件和播种机文件。

正如您在问题中所说,既没有播种数据也没有找到表格,显然有关数据库配置或迁移文件中的错误的提示。

希望这有帮助。

编辑: - 您可以尝试解决此问题。在 mysql 下面的 config / databae.php 中添加: -

 'mysql_testing' => [
        'driver'    => 'mysql',
        'host'      => env('TESTING_DB_HOST', 'localhost'),
        'database'  => env('TESTING_DB_DATABASE', 'forge'),
        'username'  => env('TESTING_DB_USERNAME', 'forge'),
        'password'  => env('TESTING_DB_PASSWORD', ''),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
    ],

现在您必须在 .env 文件中输入详细信息: -

TESTING_DB_HOST=localhost
TESTING_DB_DATABASE=homestead_testing
TESTING_DB_USERNAME=homestead
TESTING_DB_PASSWORD=secret

注意: - 迁移时仅在测试期间使用以下迁移命令。

php artisan migrate --database=mysql_testing

它用于mysql测试数据库,但你也可以为sqlite做。

答案 1 :(得分:0)

我发现问题是因为我在测试中使用数据库迁移。它有一个回滚功能,所以我只是取消注释:

$this->beforeApplicationDestroyed(function () {
            //$this->artisan('migrate:rollback');

            RefreshDatabaseState::$migrated = false;
        });