更新於 2024/12/17閱讀時間約 2 分鐘

PHPUnit 自動化測試大作戰【CH28】

在實務情境上,常會有在單一專案程式庫中,存取多個不同資料庫的使用情境,在這種情況下,我們通常會設置多個資料庫連線(Database Connection)設定。

在平常開發使用設很方便,但要做測試時就會發現一些問題:

  • 在測試程式碼或 Seeder 中調用 factory() 時,都是在預設連線資料庫上執行,但若想使用 factory() 建立其他資料庫連線之Model實例時,應該怎麼做?
  • 有些資料庫不是該專案程式庫所擁有的,因此沒有 Migration 檔案,這種情況下該如何進行資料庫測試?
  • 進行資料庫測試驗證時,所驗證的都是預設資料庫連線的資料庫,該如何驗證其他連險的資料庫資料呢?

以上問題,就讓我們一一來找解方吧!

首先讓我們假設當前的多重資料連線情境:

  • 主專案程式庫 MainProject,在此專案程式庫中,會存取另2個專案程式庫之資料,分別是 SunnyProject及 MoonProject
  • SunnyProject 只存取自己的資料庫
  • MoonProject 只存取自己的資料庫

Model 應對方式

Model 的應對方式比較簡單,筆者的經驗是當我們需要在 MainProject 中使用 SunnyProject 的資料模型時,通常我們會從 SunnyProject 複製 Model 檔案到 MainProject 中,並且設定 $connectin 變數:

<?php

namespace App\Models\Sunny;

class User{

protected $connection = 'mysql_sunny';

// 下略

}

之後再搭配後面會介紹的 Migration 應對方式 即可。

Database Assertion 應對方式

這個可能也是許多人想問的,而答案其實也很簡單,幾乎所有的 Database Assertion 函數,都有一個可選參數 $connection ,例如最基本的 assertDatabaseHas

$this->assertDatabaseHas($table, array $data, $connection = null)

當第3個參數 $connection 有指定時,PHPUnit 便會到指定的資料庫連線內,去做對應的資料庫驗證動作。

以上就是今天的介紹,下一篇再為大家介紹 Migration 應對方式

如果您喜歡這篇文章,歡迎加入追蹤以接收新文章通知 😄

本系列文章目錄

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.