Laravel 5.3 DatabaseMigrations具有破坏性

时间:2016-12-29 17:03:13

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

Laravel 5.3 with mysql,PHPUnit 5.7.4

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

<?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

如何阻止这种想法?

2 个答案:

答案 0 :(得分:2)

DatabaseMigrations是一个特质,它是高管:

  1. 在测试之前'php artisan migrate'//创建你的表,但不会播种它们
  2. 在测试'php artisan migrate:rollback'//删除表
  3. 之后

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

    第二个 - 在测试你的Things类之前使用假数据种子。

    <强>替代: 使用DatabaseTransactions特征代替DatabaseMigrations。 在这种情况下,每个测试活动都将包装在数据库事务中。测试完成后,所有更改都将通过事务的自动回滚来删除。

答案 1 :(得分:1)

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

请参阅https://stackoverflow.com/a/35228697/823549了解如何执行此操作。