2017-06-21 160 views
0

我正在爲使用Dusk的Laravel 5.4應用程序開發一套瀏覽器測試套件。其中一個測試檢查是否創建了一個對象,並且由於這是一個瀏覽器測試,當點擊提交按鈕時,該值被保存到數據庫。顯然,我不希望我的數據庫變得混亂的測試數據,也有一個問題,因爲對象的名稱必須是唯一的,因此測試將在第一次運行後失敗。我決定解決這個問題的最佳解決方案是實施一個測試數據庫,在每個測試周期結束時清除。不過,我在設置時遇到了一些問題。設置內存SQLite數據庫在Laravel 5.4中測試

目前,我的代碼不會拋出任何錯誤,但phpunit不會使用測試數據庫。我在研究如何實現數據庫時安裝了代碼隱藏,但我不確定如何處理它。下面是代碼我目前有:

.ENV

DB_CONNECTION=mysql 

.env.testing

APP_ENV=testing 
APP_DEBUG=true 
APP_KEY=this_has_a_real_key 
APP_URL=http://localhost:8000 

DB_CONNECTION=sqlite_testing 

database.php中

'default' => env('DB_CONNECTION', 'mysql'), 
'connections' => [ 

     ... 

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

     ... 

phpunit.xml

<env name="DB_CONNECTION" value="sqlite_testing" /> 

DuskTestCase.php

abstract class DuskTestCase extends BaseTestCase 
{ 
    /** 
    * Creates the application. 
    * 
    * @return \Illuminate\Foundation\Application 
    */ 
    public function createApplication() 
    { 
     putenv('DB_CONNECTION=sqlite_testing'); 

     $app = require __DIR__ . '/../bootstrap/app.php'; 

     $app->make('Illuminate\Contracts\Console\Kernel')->bootstrap(); 

     return $app; 
    } 

    public function setUp() 
    { 
     parent::setUp(); 
     //Artisan::call('migrate:refresh'); 
     Artisan::call('migrate'); 
     Artisan::call('db:seed'); 
    } 

     /** 
    * Prepare for Dusk test execution. 
    * 
    * @beforeClass 
    * @return void 
    */ 
    public static function prepare() 
    { 
     static::startChromeDriver(); 
    } 

    /** 
    * Create the RemoteWebDriver instance. 
    * 
    * @return \Facebook\WebDriver\Remote\RemoteWebDriver 
    */ 
    protected function driver() 
    { 
     return RemoteWebDriver::create(
      'http://localhost:9515', DesiredCapabilities::chrome() 
     ); 
    } 


    public function tearDown() 
    { 
     Artisan::call('migrate:reset'); 
     parent::tearDown(); 
    } 

} 

DuskTestCase和.env.testing示於它們的全部,其他有相關的部分。我如何修改這段代碼讓phpunit識別並使用我的sqlite_testing數據庫?

+0

你不能用':內存:'因爲它在一個單獨的進程中運行,所以你必須使用一個實際的sqlite.database文件。 https://stackoverflow.com/a/43479233/4233593 –

回答

2

這是因爲你的配置被緩存了。

清除你的配置緩存,PHP的工匠配置:明確

現在的PHPUnit將讀取XML文件。

決不緩存你的配置在開發環境;)