簡體   English   中英

Laravel Dusk:如何使用內存數據庫進行測試

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM