Laravel 在 Unit Test 中使用 SQLite ( 上 )
					發表人:
					Seachaos					
積分: 2432
				積分: 2432
前言:
之所以寫這篇教學 ( 筆記 ),是因為希望執行 Unit Test 時可以有個單純的環境,且完整的測試 DB 設計 ( migration )是否正確
所以找了一下將開發環境和測試環境 DB 分離的方法
( 參考自 https://laracasts.com/discuss/channels/testing/how-to-specify-a-testing-database-in-laravel-5 )
正文開始:
-   這邊使用 memory 形式的 SQLite 來做為 Laravel 與 PHPUnit 測試時的 DB 設定
於 config/database.php 的 'connections' => [ … 設定 sql_testing 做為 Test 環境使用,如下範例 
| 
 'connections' => [ ... 
'sqlite_testing' => [ 
            'driver'   => 'sqlite', 
            'database' => ':memory:', 
            'prefix'   => '', 
        ], 
… ] 
 | 
- 然後於 tests/TestCase.php 加上 putenv('DB_Con NECTION=sqlite_testing');  變數,使用上步 (1) 建立的 config
 
| 
    public function createApplication() 
    { 
        putenv('DB_Con NECTION=sqlite_testing'); 
        $app = require __DIR__.'/../bootstrap/app.php'; 
        $app->make(Illuminate\Contracts\Console\Kernel::class)->bootstrap(); 
        return $app; 
    } 
 | 
- 再來是 tests/TestCase.php 的 setUp 與 tearDown 加上 DB 的 migrate 與 reset
 
| 
     public function setUp(){ 
        parent::setUp(); 
        Artisan::call('migrate'); 
        Artisan::call('db:seed'); 
    } 
    public function tearDown(){ 
        Artisan::call('migrate:reset'); 
        parent::tearDown(); 
    } 
 | 
- 接下來就可以開始測試了...
 
