[英]Laravel Dusk: how to use in-memory DB for testing
我一直在嘗試的是在使用Laravel Dusk進行測試時使用內存數據庫。
這里我們有一個文件.env.dusk.local
,具有以下值。
DB_CONNECTION=sqlite
DB_DATABASE=:memory:
這是瀏覽器測試文件的片段。
class ViewOrderTest extends DuskTestCase
{
use DatabaseMigrations;
/** @test */
public function user_can_view_their_order()
{
$order = factory(Order::class)->create();
$this->browse(function (Browser $browser) use ($order) {
$browser->visit('/orders/' . $order->id);
$browser->assertSee('Order ABC'); //Order name
});
}
}
當執行php artisan dusk
,Dusk 開始瀏覽器測試。
但是,Dusk 似乎正在訪問我的本地數據庫,因為測試瀏覽器上有一個僅存在於我本地數據庫中的訂單名稱,而“訂單 ABC”預計會顯示在瀏覽器上。
根據文檔,Laravel Dusk 允許我們設置環境變量。
要強制 Dusk 在運行測試時使用自己的環境文件,請在項目的根目錄中創建一個 .env.dusk.{environment} 文件。 例如,如果您將從本地環境啟動 dusk 命令,您應該創建一個 .env.dusk.local 文件。
我不覺得 Dusk 正在訪問單獨的數據庫。
任何建議將不勝感激。
Laravel dusk 瀏覽器測試時不能使用:memory:
數據庫。 您的開發服務器和黃昏測試在不同的進程上運行。 灰塵測試無法訪問在開發服務器上運行的進程的內存。
最好的解決方案是創建用於測試的 sqlite 文件數據庫。
'sqlite_testing' => [
'driver' => 'sqlite',
'database' => database_path('sqlite.testing.database'),
'prefix' => '',
],
在數據庫文件夾中創建 sqlite.testing.database 文件。
確保在運行測試之前運行開發服務器使用
php artisan serve --env dusk.local
您需要在config/database.php
建立連接
'sqlite_testing' => [
'driver' => 'sqlite',
'database' => ':memory:',
'prefix' => '',
],
然后在你的phpunit.xml
文件中使用:
<env name="DB_DEFAULT" value="sqlite_testing" />
或在您的測試中使用:
putenv('DB_DEFAULT=sqlite_testing');
不要忘記在每次測試之前使用RefreshDatabase trait 來重置數據庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.