iT邦幫忙

2025 iThome 鐵人賽

DAY 12
0

封面

什麼是 Supabase 測試?

Supabase 測試,包含資料庫測試和 CI/CD 整合測試。在隔離的環境中驗證資料庫結構變更、業務邏輯和 API 功能,確保應用程式在各種情況下都能正常運作。透過自動化測試流程,可以提早發現問題,降低部署風險,並維持高品質的程式碼標準。

簡單來說

像何振宇一樣,遠端操控分身試水溫,等待時機成熟後,就到現場開始實戰。

就像為應用程式做測試,在正式上線之前,先在一個模擬的環境中測試所有功能是否正常運作。在用戶使用之前,提前發現並修復問題,避免上線後出現意外狀況。

為什麼要使用 Supabase 測試

傳統開發

  • 手動測試耗時:每次變更都需要人工驗證,效率低下
  • 回歸測試困難:難以確保新功能不會破壞既有功能
  • 團隊協作複雜:多人開發時容易產生衝突和錯誤

Supabase 測試

  • 自動化驗證:透過 CI/CD 自動執行測試,節省人力成本
  • 環境隔離:在獨立環境中測試,不影響正式資料
  • 完整覆蓋:從資料庫到 API,全方位測試應用程式

如何使用 Supabase 測試

第一步:建立測試環境

首先,確保你已經有一個 Supabase 專案並安裝了 CLI:

# 初始化 Supabase 專案(如果還沒有的話)
supabase init

# 啟動本地開發環境
supabase start

第二步:撰寫資料庫測試

Supabase 的資料庫測試使用 pgTAP 框架,能夠用 SQL 語法撰寫測試。

1. 基本測試範例

建立 supabase/tests/hello_world.test.sql

begin;
select plan(1); -- only one statement to run

SELECT has_column(
    'auth',
    'users',
    'id',
    'id should exist'
);

select * from finish();
rollback;

2. 執行測試

# 執行所有資料庫測試
supabase test db

# 執行特定測試檔案
supabase test db --file database_test.sql

第三步:建立 GitHub Actions CI/CD

1. 基本 CI/CD 設定

建立 .github/workflows/ci.yml

name: CI

on:
  push:
  pull_request:
    branches:
      - main

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - uses: supabase/setup-cli@v1
        with:
          version: latest

      - name: Start Supabase local development setup
        run: supabase start

      - name: Run tests
        run: supabase test db

    *   `on:` 定義了觸發這個工作流程的事件(例如 `push` 或 `pull_request`)。
    *   `jobs:` 定義了要執行的任務。
    *   `runs-on: ubuntu-latest` 指定了運行這個任務的環境。
    *   `actions/checkout@v4` 用於檢出你的程式碼。
    *   `supabase/setup-cli@v1` 是一個 GitHub Action,用於安裝 Supabase CLI。
    *   `supabase start` 會啟動本地的 Supabase 服務,包括資料庫。
    *   `supabase test db` 會執行你之前編寫的資料庫測試。

2. 進階設定:包含 Edge Functions 測試

如果你的專案使用 Edge Functions,可以建立更完整的測試流程:

name: CI

on:
  push:
  pull_request:
    branches:
      - main

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - uses: supabase/setup-cli@v1
        with:
          version: latest

      - name: Start Supabase local development setup
        run: supabase start

      - name: Run tests
        run: supabase test db

      - name: Test Edge Functions
        run: |
          echo "Testing Edge Functions..."
          deno test --allow-all supabase/functions/hello-world/deno-test.ts --env-file .env.local

    *   `deno test` 是 Deno 運行測試的命令。你需要根據你的 Edge Function 測試檔案路徑進行調整。

3. 部署到 Staging 環境

name: Deploy to Staging

on:
  push:
    branches:
      - develop

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - uses: supabase/setup-cli@v1
        with:
          version: latest

      - name: Link to Supabase project
        run: supabase link --project-ref ${{ secrets.STAGING_PROJECT_ID }}
        env:
          SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }}

      - name: Run migrations
        run: supabase db push

      - name: Deploy Edge Functions
        run: supabase functions deploy
        env:
          SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }}

小結

資料庫測試是確保應用程式穩定性的重要環節。從簡單的結構測試開始,逐步建立完整的測試覆蓋,讓你的 Supabase 專案更加可靠!

... to be continued

有任何想討論歡迎留言,或需要指正的地方請鞭大力一點,歡迎訂閱、按讚加分享,分享給想要提升開發效率的朋友~


上一篇
第十ㄧ關 - 打開多重次元的傳送門:Supabase Branching
下一篇
第十三關 - 支配者之手:Supabase Database API
系列文
我獨自開發 - 用 Supabase 打造全端應用13
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言