Laravel 5.3 DatabaseMigrations 具有破坏性

Laravel 5.3 DatabaseMigrations are destructive

Laravel 5.3 与 mysql,PHPUnit 5.7.4

当我使用 use DatabaseMigrations; 在 PHPUnit 中创建测试时,它会破坏它查询的数据。

<?php

use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class ThingsTest extends TestCase
{
    use DatabaseMigrations;

    /** @test */
    public function there_are_more_than_1000_things()
    {
        $things = App\Thing::all();

        $this->assertGreaterThan(1000, count($things));
    }

在我运行phpunit之前,有很多东西。在 运行 之后,mysql 说 ERROR 1146 (42S02): Table 'database.things' doesn't exist

有什么办法可以阻止这种情况吗?

您可以在 Laravel 应用程序中使用带有 PHPUnit 的测试数据库。现在您的测试正在使用您的主数据库并将修改现有信息。

请参阅 了解如何执行此操作。

DatabaseMigrations 是一个特征,它执行:

  1. 测试前 'php artisan migrate' // 创建您的表,但不为它们播种
  2. 测试后'php artisan migrate:rollback' // 删除表

所以,第一 - 确保您正在使用另一个数据库进行测试。

第 2 - 在测试您的 Things class.

之前,在您的表中植入虚假数据

选择: 使用 DatabaseTransactions 特征而不是 DatabaseMigrations。 在这种情况下,每个测试 activity 都将包含在数据库事务中。测试后,您的所有更改将被事务的回滚自动删除。