Directus CMS Testing Strategy QA

ทำไมต้องทำ Testing Strategy สำหรับ Directus CMS

Directus เป็น headless CMS แบบ open source ที่สร้าง REST และ GraphQL API จาก database โดยตรง เมื่อใช้ Directus เป็น backend ให้กับ production app ต้องมี testing strategy ที่ครอบคลุมทั้ง API layer, custom extensions, data validation และ integration กับ frontend เพราะ Directus ให้อิสระในการออกแบบ schema มาก ถ้าไม่มี test รองรับจะเจอปัญหา regression ทุกครั้งที่ upgrade version หรือเปลี่ยน schema
ติดตั้ง Directus สำหรับ Testing Environment
# docker-compose.yml สำหรับ test environment
version: '3.8'
services:
directus:
image: directus/directus:10.10.0
ports:
- "8055:8055"
environment:
KEY: "test-key-not-for-production"
SECRET: "test-secret-not-for-production"
ADMIN_EMAIL: "admin@test.local"
ADMIN_PASSWORD: "TestPassword123!"
DB_CLIENT: "pg"
DB_HOST: "postgres"
DB_PORT: "5432"
DB_DATABASE: "directus_test"
DB_USER: "directus"
DB_PASSWORD: "directus_test_pass"
CACHE_ENABLED: "false"
RATE_LIMITER_ENABLED: "false"
depends_on:
postgres:
condition: service_healthy
postgres:
image: postgres:16-alpine
environment:
POSTGRES_DB: directus_test
POSTGRES_USER: directus
POSTGRES_PASSWORD: directus_test_pass
healthcheck:
test: ["CMD-SHELL", "pg_isready -U directus"]
interval: 5s
timeout: 3s
retries: 5
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
# รัน test environment
docker compose up -d
# รอจน Directus พร้อม
until curl -s http://localhost:8055/server/health | grep -q '"status":"ok"'; do
echo "Waiting for Directus..."
sleep 2
done
echo "Directus is ready"
API Testing ด้วย Jest และ Axios
ทดสอบ Directus API endpoints ทั้ง CRUD operations, filtering, permissions และ custom endpoints
# ติดตั้ง dependencies สำหรับ test
npm init -y
npm install --save-dev jest @types/jest ts-jest axios dotenv
npm install --save-dev @directus/sdk
// jest.config.js
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
testTimeout: 30000,
setupFilesAfterSetup: ['./tests/setup.ts'],
testMatch: ['**/tests/**/*.test.ts'],
};
Permission Testing — ทดสอบระบบ Access Control

Directus มี granular permission system ที่ต้องทดสอบให้ครบทุก role เพื่อป้องกัน data leak
เนื้อหาเกี่ยวข้อง — แนะนำให้อ่าน LLM Quantization GGUF CDN Configuration
Load Testing ด้วย k6
ทดสอบว่า Directus API รับ load ได้เพียงพอก่อน deploy production
# รัน load test
k6 run load-test.js
# ตัวอย่าง output
# ✓ list status 200
# ✓ list has data
# ✓ get status 200
#
# http_req_duration..........: avg=45ms min=12ms med=38ms max=890ms p(90)=120ms p(95)=230ms
# http_req_failed............: 0.00% ✓ 0 ✗ 4521
# iterations.................: 4521 75.35/s
CI/CD Pipeline สำหรับ Directus Testing
# .github/workflows/test-directus.yml
name: Directus API Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:16-alpine
env:
POSTGRES_DB: directus_test
POSTGRES_USER: directus
POSTGRES_PASSWORD: directus_test_pass
ports: ['5432:5432']
options: --health-cmd="pg_isready" --health-interval=5s --health-timeout=3s --health-retries=5
steps:
- uses: actions/checkout@v4
- name: Start Directus
run: |
docker run -d --name directus --network host \
-e KEY=test-key -e SECRET=test-secret \
-e ADMIN_EMAIL=admin@test.local \
-e ADMIN_PASSWORD=TestPassword123! \
-e DB_CLIENT=pg -e DB_HOST=localhost \
-e DB_PORT=5432 -e DB_DATABASE=directus_test \
-e DB_USER=directus -e DB_PASSWORD=directus_test_pass \
directus/directus:10.10.0
- name: Wait for Directus
run: |
for i in $(seq 1 30); do
curl -s http://localhost:8055/server/health && break
sleep 2
done
- uses: actions/setup-node@v4
with: { node-version: '20' }
- run: npm ci
- run: npm test -- --coverage
- name: Upload coverage
uses: actions/upload-artifact@v4
with:
name: coverage
path: coverage/
FAQ — คำถามที่พบบ่อย
Q: ควรใช้ Directus SDK หรือ Axios ในการเขียน test?
แนะนำเพิ่มเติม — อ่านเพิ่มเติมที่ SiamCafeBook
A: ถ้าต้องการทดสอบ API behavior ตรงๆ ให้ใช้ Axios เพราะเห็น request/response ชัดเจน ถ้าต้องการทดสอบ business logic ที่ใช้ SDK อยู่แล้วให้ใช้ SDK เพื่อให้ test ใกล้เคียง production code
เนื้อหาเกี่ยวข้อง — อ่านต่อ: Airflow DAG Design DevSecOps Integration
Q: ทำ snapshot testing กับ Directus schema ได้ไหม?
A: ได้ ใช้คำสั่ง npx directus schema snapshot ./snapshot.yaml เพื่อ export schema แล้วเก็บใน git ตอน CI ให้เปรียบเทียบกับ snapshot ก่อนหน้าเพื่อตรวจจับ schema change ที่ไม่ตั้งใจ
แนะนำเพิ่มเติม — คอร์สเทรด Forex ที่ iCafeForex
เนื้อหาเกี่ยวข้อง — ดูเพิ่มเติมเรื่อง Whisper Speech Message Queue Design
Q: ทดสอบ Directus Flows (automation) อย่างไร?
A: สร้าง test ที่ trigger event แล้วตรวจ side effect เช่น สร้าง item แล้วเช็คว่า Flow ส่ง webhook หรือสร้าง related item ตามที่ตั้งไว้หรือไม่ ใช้ mock server อย่าง msw หรือ nock รับ webhook request ระหว่าง test
Q: ควร test migration ของ Directus อย่างไร?
เนื้อหาเกี่ยวข้อง — บทความที่เกี่ยวข้อง: WordPress Block Theme SSL TLS Certificate
A: ใช้ npx directus schema apply ./snapshot.yaml กับ test database ก่อน apply กับ production ตรวจสอบว่า migration ไม่ทำ data loss โดยสร้าง seed data ก่อน migrate แล้วเช็คว่า data ยังครบอยู่





