2013-07-24 59 views
2

我有一個Laravel 4應用程序,它配置了用於測試的sqlite數據庫。Laravel 4 PHPUnit Sqlite數據庫,在每次測試之前刪除項目

我在工作臺上包

工作,我有我的測試車型在PHPUnit的測試問題,因爲我在我的模型定義了一些獨特的性能。我運行Artisan::call('migrate', array('--bench' => 'vendor/webshop'));從我的基本測試類擴展其他測試。

我認爲這會運行數據庫遷移,但在我看來它不會刪除數據庫中的模型。

,因爲如果我這樣做

public function setUp() { 

    parent::setUp(); 

    $this->order = Order::create(array(
     "uniquekey" = "123" 
    )); 
} 

我得到一個錯誤的說法,不能插入,因爲違反唯一鍵規則的模型。

我應該如何在每次測試之前清理數據庫?

+0

我只是通過執行'$ this-> order-> forceDelete();'來刪除我的模型,但這不是真正的解決方案 – pfried

回答

3

您應該爲測試目的定義環境。

其實Laravel確實有一個爲你 - 通知testing文件夾內你的app/config

創建app/config/testing/database.php(或修改如果存在的話),並把這樣的:

return array(

    'default' => 'sqlite', 

    'connections' => array(

     'sqlite' => array(
      'driver' => 'sqlite', 
      'database' => ':memory:', // this will do the trick ;) 
      'prefix' => '', 
     ), 
    ), 
); 

當你運行測試,Laravel設置它的環境,以「測試」 automaticaly - 沒必要玩這個。 SQLite內存數據庫是使用RAM存儲的內存,因此速度很快 - 是的,測試也從空數據庫開始。

+0

,正如我在第一行中提到的,我已經這樣做了,但該數據庫只爲每個類清除,而不是爲每個測試,我想 – pfried

+1

沒有選項「遷移:刷新」,這裏討論:https://github.com/laravel/framework/issues/1267#issuecomment-21468659 – pfried

相關問題