2016年7月21日 星期四

Laravel Unit Test (上)

前言:
之所以寫這篇教學 ( 筆記 ),是因為希望執行 Unit Test 時可以有個單純的環境,且完整的測試 DB 設計 ( migration )是否正確
所以找了一下將開發環境和測試環境 DB 分離的方法

正文開始:

  1.   這邊使用 memory 形式的 SQLite 來做為 Laravel 與 PHPUnit 測試時的 DB 設定
    於 config/database.php 的 'connections' => [ … 設定 sql_testing 做為 Test 環境使用,如下範例

'connections' => [ ...

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

… ]

  1. 然後於 tests/TestCase.php 加上 putenv('DB_CONNECTION=sqlite_testing');  變數,使用上步 (1) 建立的 config


   public function createApplication()
    {
        putenv('DB_CONNECTION=sqlite_testing');

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

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

        return $app;
    }

  1. 再來是 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();
    }

  1. 接下來就可以開始測試了...