這篇文章主要介紹了用另一種方法來進行Laravel資料庫測試(SQLite),有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
在測試方面,Laravel
內建使用PHPUnit
提供了非常方便的解決方案。而對於資料庫增刪改查的測試,要解決的一個很重要的問題就是如何在測試完成之後,恢復資料庫的原貌,例如要測試一個用戶註冊的方法,需要插入一條用戶記錄到資料庫,但是測試完成之後,我們並不想讓這條測試案例保存在資料庫裡。為了解決這個問題,Laravel
提供了一個非常方便的方案:
#使用遷移:DatabaseMigrations
使用交易:DatabaseTransactions
參考資料:https://laravel.com/docs/5.3/database-testing#resetting-the-database- after-each-test
SQLite
的記憶體資料庫:memory:
Laravel
提供的兩種解決方案,仍然對資料庫進行了讀寫操作,某些時候你可能並不想這樣(例如多人共享一個線上開發資料庫),此時,還可以用一種更為優雅的方式: SQLlite
,邏輯其實也非常簡單:就是在跑測試案例的時候,將資料庫的連線替換為SQLite
。
例如我們有以下測試類別(該事例並不具有代表性,僅用於說明問題,並假設本機已經安裝SQLite
):
class HomePageTest extends TestCase { public function testHomePage() { // 创建一个测试用户,并保存 $user = factory(App\User::class)->create(); $this->actingAs($user)->visit('/home')->see('Dashboard'); } }
首先在Laravel
的資料庫設定文件,即config/database.php
的connections
陣列中添加一個新的資料庫連線
'sqlite' => [ 'driver' => 'sqlite', 'database' => ':memory:', 'prefix' => '', ],
這裡一個很重要的參數就是'database' => ':memory:'
,:memory:
資料庫是SQLite
中內建的記憶體資料庫,每次執行測試案例的時候都會在記憶體中建立一個新的資料庫,並在測試完成關閉資料庫連線後,自動清除掉,具有良好的隔離性,又因為是在記憶體中的,所以速度也很快,這些特性對於測試非常方便,這也是我們選用SQLite
資料庫作為測試函式庫的一個非常重要的原因。有關詳細解釋,請點擊這裡。
然後需要修改PHPUnit
的設定文件,在phpunit.xml
中,將資料庫連接改為剛剛定義的SQLite
連接
<php> <env name="APP_ENV" value="testing"/> <env name="CACHE_DRIVER" value="array"/> <env name="SESSION_DRIVER" value="array"/> <env name="QUEUE_DRIVER" value="sync"/> <!-- 将数据库连接改为刚刚定义的SQLite连接 --> <env name="DB_CONNECTION" value="sqlite" /> </php>
這會覆蓋.env
中定義的資料庫連接DB_CONNECTION=mysql
,並告訴框架在執行測試的時候,用sqlite
連線代替mysql
連線。
最後需要在運行測試案例之前執行資料庫遷移,在測試類別的基類,即TestCase.php
中添加setUp
方法
public function setUp() { parent::setUp(); // 执行数据库迁移 $this->artisan('migrate'); }
這樣在每次執行測試案例之前,都會向SQLite
的:memory:
資料庫中執行所有的遷移,生成業務邏輯所需的資料表。
此方案關鍵點在於使用SQLite
內建的記憶體資料庫:memory:
,因此速度比較快,有很好的隔離性,也不會對我們的開發資料庫有任何的影響。
當然該方案也有缺點,假如項目的資料庫龐大,有大量的數據表或者遷移文件,會消耗大量內存,當運行測試的時候可能會由於內存不足,導致測試中斷。此時需要為PHP分配合適的內存,在php.ini
中修改配置memory_limit = 128M
如何解決Laravel.log 檔案寫入的問題<a title="如何解决Laravel.log 文件写入的问题" href="http://www.php.cn/php-weizijiaocheng-406465.html" target="_blank"></a>
Laravel開發環境部署之homestead 安裝設定流程(windows系統)
以上是用另一種方法來進行Laravel資料庫測試(SQLite)的詳細內容。更多資訊請關注PHP中文網其他相關文章!