2016-12-29 34 views
1

Laravel 5.3與MySQL,PHPUnit的5.7.4Laravel 5.3 DatabaseMigrations是破壞性的

當我創建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

任何想法如何阻止?

回答

1

DatabaseMigrations是一個特點,它的高管:

  1. 之前測試的PHP工匠遷移'//創建你的表,但沒有他們的種子
  2. 試驗後的PHP工匠遷移:回滾「/ /刪除表格

因此,1st - 確保您使用另一個數據庫進行測試。

第二種 - 在測試您的Things類之前用假數據對您的表進行種子處理。

備選: 使用DatabaseTransactions特質,而不是DatabaseMigrations。 在這種情況下,每個測試活動將被包裝在數據庫事務中。經過測試後,所有更改將自動由事務回滾刪除。

+0

'DatabaseTransactions'完成了任務。 –