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();
}
|
- 接下來就可以開始測試了...