Supabase 測試,包含資料庫測試和 CI/CD 整合測試。在隔離的環境中驗證資料庫結構變更、業務邏輯和 API 功能,確保應用程式在各種情況下都能正常運作。透過自動化測試流程,可以提早發現問題,降低部署風險,並維持高品質的程式碼標準。
像何振宇一樣,遠端操控分身試水溫,等待時機成熟後,就到現場開始實戰。
就像為應用程式做測試,在正式上線之前,先在一個模擬的環境中測試所有功能是否正常運作。在用戶使用之前,提前發現並修復問題,避免上線後出現意外狀況。
首先,確保你已經有一個 Supabase 專案並安裝了 CLI:
# 初始化 Supabase 專案(如果還沒有的話)
supabase init
# 啟動本地開發環境
supabase start
Supabase 的資料庫測試使用 pgTAP 框架,能夠用 SQL 語法撰寫測試。
建立 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;
# 執行所有資料庫測試
supabase test db
# 執行特定測試檔案
supabase test db --file database_test.sql
建立 .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` 會執行你之前編寫的資料庫測試。
如果你的專案使用 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 測試檔案路徑進行調整。
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
有任何想討論歡迎留言,或需要指正的地方請鞭大力一點,歡迎訂閱、按讚加分享,分享給想要提升開發效率的朋友~