e2e-test-scenarios
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chinesee2e-test-scenarios
端到端测试场景
Instructions
使用说明
This skill provides comprehensive end-to-end testing capabilities for Supabase applications, covering database operations, authentication flows, AI features (pgvector), realtime subscriptions, and production readiness validation.
本技能为Supabase应用提供全面的端到端测试能力,涵盖数据库操作、认证流程、AI功能(pgvector)、实时订阅和生产就绪性验证。
Phase 1: Setup Test Environment
第一阶段:搭建测试环境
-
Initialize test environment:bash
bash scripts/setup-test-env.shThis creates:- Test database configuration
- Environment variables for testing
- Test data fixtures
- CI/CD configuration templates
-
Configure test database:
- Use dedicated test project or local Supabase instance
- Never run tests against production
- Set and
SUPABASE_TEST_URLSUPABASE_TEST_ANON_KEY - Enable pgTAP extension for database tests
-
Install dependencies:bash
npm install --save-dev @supabase/supabase-js jest @types/jest # or pnpm add -D @supabase/supabase-js vitest
-
初始化测试环境:bash
bash scripts/setup-test-env.sh该脚本会创建:- 测试数据库配置
- 测试用环境变量
- 测试数据预制件
- CI/CD配置模板
-
配置测试数据库:
- 使用专用测试项目或本地Supabase实例
- 切勿在生产环境运行测试
- 设置和
SUPABASE_TEST_URLSUPABASE_TEST_ANON_KEY - 启用pgTAP扩展以进行数据库测试
-
安装依赖:bash
npm install --save-dev @supabase/supabase-js jest @types/jest # 或 pnpm add -D @supabase/supabase-js vitest
Phase 2: Database Workflow Testing
第二阶段:数据库工作流测试
Test complete database operations from schema to queries:
-
Run database E2E tests:bash
bash scripts/test-database-workflow.shThis validates:- Schema creation and migrations
- Table relationships and foreign keys
- RLS policies enforcement
- Triggers and functions
- Data integrity constraints
-
Use pgTAP for SQL-level tests:bash
# Run all database tests supabase test db # Run specific test file supabase test db --file tests/database/users.test.sql -
Test schema migrations:bash
# Test migration up/down supabase db reset --linked supabase db push # Verify schema state bash scripts/validate-schema.sh
测试从模式到查询的完整数据库操作:
-
运行数据库端到端测试:bash
bash scripts/test-database-workflow.sh该脚本会验证:- 模式创建和迁移
- 表关系和外键
- RLS策略执行
- 触发器和函数
- 数据完整性约束
-
使用pgTAP进行SQL级测试:bash
# 运行所有数据库测试 supabase test db # 运行指定测试文件 supabase test db --file tests/database/users.test.sql -
测试模式迁移:bash
# 测试迁移的升级/回滚 supabase db reset --linked supabase db push # 验证模式状态 bash scripts/validate-schema.sh
Phase 3: Authentication Flow Testing
第三阶段:认证流程测试
Test complete auth workflows end-to-end:
-
Run authentication E2E tests:bash
bash scripts/test-auth-workflow.shThis validates:- Email/password signup and login
- Magic link authentication
- OAuth provider flows (Google, GitHub, etc.)
- Session management and refresh
- Password reset flows
- Email verification
- Multi-factor authentication (MFA)
-
Test RLS with authenticated users:typescript
// See templates/auth-tests.ts for complete examples test('authenticated users see only their data', async () => { const { data, error } = await supabase .from('private_notes') .select('*'); expect(data).toHaveLength(userNoteCount); expect(data.every(note => note.user_id === userId)).toBe(true); }); -
Test session persistence:bash
# Run session validation tests npm test -- auth-session.test.ts
端到端测试完整的认证工作流:
-
运行认证端到端测试:bash
bash scripts/test-auth-workflow.sh该脚本会验证:- 邮箱/密码注册和登录
- 魔术链接认证
- OAuth提供商流程(Google、GitHub等)
- 会话管理和刷新
- 密码重置流程
- 邮箱验证
- 多因素认证(MFA)
-
测试已认证用户的RLS:typescript
// 完整示例请查看templates/auth-tests.ts test('已认证用户仅能查看自己的数据', async () => { const { data, error } = await supabase .from('private_notes') .select('*'); expect(data).toHaveLength(userNoteCount); expect(data.every(note => note.user_id === userId)).toBe(true); }); -
测试会话持久性:bash
# 运行会话验证测试 npm test -- auth-session.test.ts
Phase 4: AI Features Testing (pgvector)
第四阶段:AI功能测试(pgvector)
Test vector search and semantic operations:
-
Run AI features E2E tests:bash
bash scripts/test-ai-features.shThis validates:- pgvector extension is enabled
- Embedding storage and retrieval
- Vector similarity search accuracy
- HNSW/IVFFlat index performance
- Hybrid search (keyword + semantic)
- Embedding dimension consistency
-
Test vector search accuracy:typescript
// See templates/vector-search-tests.ts test('semantic search returns relevant results', async () => { const queryEmbedding = await generateEmbedding('machine learning'); const { data } = await supabase.rpc('match_documents', { query_embedding: queryEmbedding match_threshold: 0.7 match_count: 5 }); expect(data.length).toBeGreaterThan(0); expect(data[0].similarity).toBeGreaterThan(0.7); }); -
Test embedding operations:bash
# Validate embedding pipeline npm test -- embedding-workflow.test.ts -
Performance benchmarking:bash
# Run performance tests bash scripts/benchmark-vector-search.sh [TABLE_NAME] [VECTOR_DIM]
测试向量搜索和语义操作:
-
运行AI功能端到端测试:bash
bash scripts/test-ai-features.sh该脚本会验证:- pgvector扩展已启用
- 嵌入向量的存储和检索
- 向量相似度搜索的准确性
- HNSW/IVFFlat索引性能
- 混合搜索(关键词+语义)
- 嵌入向量维度一致性
-
测试向量搜索准确性:typescript
// 示例请查看templates/vector-search-tests.ts test('语义搜索返回相关结果', async () => { const queryEmbedding = await generateEmbedding('machine learning'); const { data } = await supabase.rpc('match_documents', { query_embedding: queryEmbedding match_threshold: 0.7 match_count: 5 }); expect(data.length).toBeGreaterThan(0); expect(data[0].similarity).toBeGreaterThan(0.7); }); -
测试嵌入向量操作:bash
# 验证嵌入向量流水线 npm test -- embedding-workflow.test.ts -
性能基准测试:bash
# 运行性能测试 bash scripts/benchmark-vector-search.sh [TABLE_NAME] [VECTOR_DIM]
Phase 5: Realtime Features Testing
第五阶段:实时功能测试
Test realtime subscriptions and presence:
-
Run realtime E2E tests:bash
bash scripts/test-realtime-workflow.shThis validates:- Database change subscriptions
- Broadcast messaging
- Presence tracking
- Connection handling
- Reconnection logic
- Subscription cleanup
-
Test database change subscriptions:typescript
// See templates/realtime-tests.ts test('receives real-time updates on insert', async () => { const updates = []; const subscription = supabase .channel('test-channel') .on('postgres_changes' { event: 'INSERT', schema: 'public', table: 'messages' } (payload) => updates.push(payload) ) .subscribe(); await supabase.from('messages').insert({ content: 'test' }); await waitFor(() => expect(updates).toHaveLength(1)); }); -
Test presence and broadcast:bash
# Run presence tests npm test -- presence.test.ts
测试实时订阅和在线状态跟踪:
-
运行实时端到端测试:bash
bash scripts/test-realtime-workflow.sh该脚本会验证:- 数据库变更订阅
- 广播消息
- 在线状态跟踪
- 连接处理
- 重连逻辑
- 订阅清理
-
测试数据库变更订阅:typescript
// 示例请查看templates/realtime-tests.ts test('接收插入操作的实时更新', async () => { const updates = []; const subscription = supabase .channel('test-channel') .on('postgres_changes' { event: 'INSERT', schema: 'public', table: 'messages' } (payload) => updates.push(payload) ) .subscribe(); await supabase.from('messages').insert({ content: 'test' }); await waitFor(() => expect(updates).toHaveLength(1)); }); -
测试在线状态和广播:bash
# 运行在线状态测试 npm test -- presence.test.ts
Phase 6: Complete Integration Tests
第六阶段:完整集成测试
Run full workflow tests simulating real user scenarios:
-
Execute complete E2E test suite:bash
bash scripts/run-e2e-tests.shThis runs:- User signup → profile creation → data CRUD → logout
- Document upload → embedding generation → semantic search
- Chat message → realtime delivery → read receipts
- Multi-user collaboration scenarios
- Error handling and recovery
-
Run test scenarios in parallel:bash
# Run all test suites npm test -- --maxWorkers=4 # Run specific workflow npm test -- workflows/document-rag.test.ts -
Generate test reports:bash
# Generate coverage report npm test -- --coverage # Generate HTML report npm test -- --coverage --coverageReporters=html
运行模拟真实用户场景的全工作流测试:
-
执行完整的端到端测试套件:bash
bash scripts/run-e2e-tests.sh该脚本会运行:- 用户注册→创建个人资料→数据增删改查→登出
- 文档上传→嵌入向量生成→语义搜索
- 聊天消息→实时投递→已读回执
- 多用户协作场景
- 错误处理和恢复
-
并行运行测试场景:bash
# 运行所有测试套件 npm test -- --maxWorkers=4 # 运行指定工作流 npm test -- workflows/document-rag.test.ts -
生成测试报告:bash
# 生成覆盖率报告 npm test -- --coverage # 生成HTML报告 npm test -- --coverage --coverageReporters=html
Phase 7: CI/CD Integration
第七阶段:CI/CD集成
Setup automated testing in CI/CD pipelines:
-
Use GitHub Actions template:bash
# Copy CI config to your repo cp templates/ci-config.yml .github/workflows/supabase-tests.yml -
Configure test secrets:
- Add to GitHub secrets
SUPABASE_TEST_URL - Add to GitHub secrets
SUPABASE_TEST_ANON_KEY - Add for admin tests
SUPABASE_TEST_SERVICE_ROLE_KEY
- Add
-
Run tests on pull requests:
- Automatic test execution on PR creation
- Blocking PRs if tests fail
- Test result reporting in PR comments
在CI/CD流水线中设置自动化测试:
-
使用GitHub Actions模板:bash
# 将CI配置复制到你的仓库 cp templates/ci-config.yml .github/workflows/supabase-tests.yml -
配置测试密钥:
- 将添加到GitHub密钥
SUPABASE_TEST_URL - 将添加到GitHub密钥
SUPABASE_TEST_ANON_KEY - 将添加到GitHub密钥以进行管理员测试
SUPABASE_TEST_SERVICE_ROLE_KEY
- 将
-
在拉取请求时运行测试:
- 创建PR时自动执行测试
- 测试失败时阻止PR合并
- 在PR评论中报告测试结果
Phase 8: Cleanup and Teardown
第八阶段:清理和收尾
Clean up test resources after testing:
-
Run cleanup script:bash
bash scripts/cleanup-test-resources.shThis removes:- Test users and sessions
- Test data from tables
- Temporary test databases
- Test file uploads
-
Reset test database:bash
# Reset to clean state supabase db reset --linked # Or use migration-based reset bash scripts/reset-test-db.sh
测试完成后清理测试资源:
-
运行清理脚本:bash
bash scripts/cleanup-test-resources.sh该脚本会移除:- 测试用户和会话
- 表中的测试数据
- 临时测试数据库
- 测试文件上传
-
重置测试数据库:bash
# 重置为干净状态 supabase db reset --linked # 或使用基于迁移的重置 bash scripts/reset-test-db.sh
Test Coverage Areas
测试覆盖范围
Database Testing
数据库测试
- Schema Validation: Table structure, columns, constraints
- Migration Testing: Up/down migrations, rollback safety
- RLS Policies: Access control, policy enforcement
- Functions & Triggers: Database logic, event handlers
- Performance: Query optimization, index usage
- 模式验证:表结构、列、约束
- 迁移测试:升级/回滚迁移、回滚安全性
- RLS策略:访问控制、策略执行
- 函数与触发器:数据库逻辑、事件处理程序
- 性能:查询优化、索引使用
Authentication Testing
认证测试
- User Flows: Signup, login, logout, password reset
- Provider Integration: OAuth, magic links, phone auth
- Session Management: Token refresh, expiration, persistence
- MFA: Setup, verification, recovery codes
- Security: Rate limiting, brute force protection
- 用户流程:注册、登录、登出、密码重置
- 提供商集成:OAuth、魔术链接、电话认证
- 会话管理:令牌刷新、过期、持久性
- MFA:设置、验证、恢复代码
- 安全性:速率限制、暴力破解防护
AI Features Testing
AI功能测试
- Vector Operations: Insert, update, delete embeddings
- Similarity Search: Accuracy, relevance, threshold tuning
- Index Performance: HNSW vs IVFFlat, query speed
- Hybrid Search: Combined keyword and semantic search
- Dimension Validation: Embedding size consistency
- 向量操作:嵌入向量的插入、更新、删除
- 相似度搜索:准确性、相关性、阈值调整
- 索引性能:HNSW vs IVFFlat、查询速度
- 混合搜索:关键词与语义搜索结合
- 维度验证:嵌入向量大小一致性
Realtime Testing
实时测试
- Subscriptions: Database changes, broadcasts, presence
- Connection Management: Connect, disconnect, reconnect
- Message Delivery: Ordering, reliability, deduplication
- Performance: Latency, throughput, concurrent users
- Cleanup: Subscription disposal, memory leaks
- 订阅:数据库变更、广播、在线状态
- 连接管理:连接、断开、重连
- 消息投递:顺序、可靠性、去重
- 性能:延迟、吞吐量、并发用户
- 清理:订阅销毁、内存泄漏
Integration Testing
集成测试
- Multi-Component: Auth + Database + Storage
- User Journeys: Complete workflows end-to-end
- Error Scenarios: Network failures, invalid data, rate limits
- Edge Cases: Concurrent updates, race conditions, timeouts
- 多组件:认证+数据库+存储
- 用户旅程:端到端完整工作流
- 错误场景:网络故障、无效数据、速率限制
- 边缘情况:并发更新、竞争条件、超时
Test Data Strategies
测试数据策略
Fixture Management
预制件管理
typescript
// Load test fixtures
const testData = await loadFixtures('users', 'posts', 'comments');
// Seed database
await seedDatabase(testData);
// Cleanup after tests
afterAll(async () => {
await cleanupFixtures();
});typescript
// 加载测试预制件
const testData = await loadFixtures('users', 'posts', 'comments');
// 填充数据库
await seedDatabase(testData);
// 测试后清理
afterAll(async () => {
await cleanupFixtures();
});Factory Patterns
工厂模式
typescript
// Create test users with factories
const user = await createTestUser({
email: 'test@example.com'
metadata: { role: 'admin' }
});
// Create related data
const posts = await createTestPosts(user.id, 5);typescript
// 使用工厂创建测试用户
const user = await createTestUser({
email: 'test@example.com'
metadata: { role: 'admin' }
});
// 创建关联数据
const posts = await createTestPosts(user.id, 5);Isolation Strategies
隔离策略
- Test Database: Dedicated test project
- Transaction Rollback: Rollback after each test
- Namespace Prefixes: prefix for test data
test_ - Time-based Cleanup: Delete data older than X hours
- 测试数据库:专用测试项目
- 事务回滚:每次测试后回滚
- 命名空间前缀:测试数据使用前缀
test_ - 基于时间的清理:删除早于X小时的数据
Performance Benchmarks
性能基准
Query Performance Targets
查询性能目标
- Simple queries: < 50ms
- Vector similarity search: < 100ms
- Hybrid search: < 200ms
- Complex joins: < 300ms
- 简单查询:< 50ms
- 向量相似度搜索:< 100ms
- 混合搜索:< 200ms
- 复杂连接:< 300ms
Realtime Latency Targets
实时延迟目标
- Message delivery: < 100ms
- Presence updates: < 200ms
- Database changes: < 500ms
- 消息投递:< 100ms
- 在线状态更新:< 200ms
- 数据库变更:< 500ms
Throughput Targets
吞吐量目标
- Authenticated requests: 100+ req/s
- Vector searches: 50+ req/s
- Realtime messages: 1000+ msg/s
- 认证请求:100+ 次/秒
- 向量搜索:50+ 次/秒
- 实时消息:1000+ 条/秒
Common Test Patterns
常见测试模式
Pattern 1: Auth-Protected Resource Test
模式1:受认证保护的资源测试
typescript
test('authenticated user CRUD operations', async () => {
// 1. Sign up user
const { user } = await supabase.auth.signUp({
email: 'test@example.com'
password: 'test123'
});
// 2. Create resource
const { data } = await supabase
.from('notes')
.insert({ content: 'test note' })
.select()
.single();
// 3. Verify ownership
expect(data.user_id).toBe(user.id);
// 4. Update resource
await supabase
.from('notes')
.update({ content: 'updated' })
.eq('id', data.id);
// 5. Delete resource
await supabase.from('notes').delete().eq('id', data.id);
});typescript
test('已认证用户的CRUD操作', async () => {
// 1. 用户注册
const { user } = await supabase.auth.signUp({
email: 'test@example.com'
password: 'test123'
});
// 2. 创建资源
const { data } = await supabase
.from('notes')
.insert({ content: 'test note' })
.select()
.single();
// 3. 验证所有权
expect(data.user_id).toBe(user.id);
// 4. 更新资源
await supabase
.from('notes')
.update({ content: 'updated' })
.eq('id', data.id);
// 5. 删除资源
await supabase.from('notes').delete().eq('id', data.id);
});Pattern 2: Vector Search Workflow Test
模式2:向量搜索工作流测试
typescript
test('document RAG workflow', async () => {
// 1. Upload document
const doc = await uploadDocument('test.pdf');
// 2. Generate embeddings
const chunks = await chunkDocument(doc);
const embeddings = await generateEmbeddings(chunks);
// 3. Store in database
await supabase.from('document_chunks').insert(
chunks.map((chunk, i) => ({
content: chunk
embedding: embeddings[i]
document_id: doc.id
}))
);
// 4. Perform semantic search
const query = 'What is the main topic?';
const queryEmbedding = await generateEmbedding(query);
const { data } = await supabase.rpc('match_documents', {
query_embedding: queryEmbedding
match_count: 5
});
// 5. Verify results
expect(data.length).toBeGreaterThan(0);
expect(data[0].similarity).toBeGreaterThan(0.7);
});typescript
test('文档RAG工作流', async () => {
// 1. 上传文档
const doc = await uploadDocument('test.pdf');
// 2. 生成嵌入向量
const chunks = await chunkDocument(doc);
const embeddings = await generateEmbeddings(chunks);
// 3. 存储到数据库
await supabase.from('document_chunks').insert(
chunks.map((chunk, i) => ({
content: chunk
embedding: embeddings[i]
document_id: doc.id
}))
);
// 4. 执行语义搜索
const query = '主要主题是什么?';
const queryEmbedding = await generateEmbedding(query);
const { data } = await supabase.rpc('match_documents', {
query_embedding: queryEmbedding
match_count: 5
});
// 5. 验证结果
expect(data.length).toBeGreaterThan(0);
expect(data[0].similarity).toBeGreaterThan(0.7);
});Pattern 3: Realtime Collaboration Test
模式3:实时协作测试
typescript
test('multi-user realtime chat', async () => {
// 1. Create two users
const user1 = await createTestUser();
const user2 = await createTestUser();
// 2. Subscribe to messages
const user1Messages = [];
const user2Messages = [];
const sub1 = await subscribeToMessages(user1, user1Messages);
const sub2 = await subscribeToMessages(user2, user2Messages);
// 3. User 1 sends message
await sendMessage(user1, 'Hello from user 1');
// 4. Verify both users receive it
await waitFor(() => {
expect(user1Messages).toHaveLength(1);
expect(user2Messages).toHaveLength(1);
});
// 5. Cleanup subscriptions
await sub1.unsubscribe();
await sub2.unsubscribe();
});typescript
test('多用户实时聊天', async () => {
// 1. 创建两个用户
const user1 = await createTestUser();
const user2 = await createTestUser();
// 2. 订阅消息
const user1Messages = [];
const user2Messages = [];
const sub1 = await subscribeToMessages(user1, user1Messages);
const sub2 = await subscribeToMessages(user2, user2Messages);
// 3. 用户1发送消息
await sendMessage(user1, '来自用户1的问候');
// 4. 验证两个用户都收到消息
await waitFor(() => {
expect(user1Messages).toHaveLength(1);
expect(user2Messages).toHaveLength(1);
});
// 5. 清理订阅
await sub1.unsubscribe();
await sub2.unsubscribe();
});Troubleshooting
故障排除
Tests Failing Intermittently
测试间歇性失败
- Race Conditions: Add proper wait conditions
- Async Issues: Ensure all promises are awaited
- Cleanup: Verify test isolation and cleanup
- Timeouts: Increase timeout for slow operations
- 竞争条件:添加适当的等待条件
- 异步问题:确保所有Promise都被await
- 清理:验证测试隔离和清理步骤
- 超时:为慢速操作增加超时时间
Tests Passing Locally but Failing in CI
本地测试通过但CI中失败
- Environment: Verify env variables in CI
- Timing: CI may be slower, increase timeouts
- Parallelization: Check for shared state issues
- Dependencies: Ensure all deps are installed
- 环境:验证CI中的环境变量
- 计时:CI可能更慢,增加超时时间
- 并行化:检查共享状态问题
- 依赖:确保所有依赖都已安装
Slow Test Execution
测试执行缓慢
- Parallel Tests: Use flag
--maxWorkers - Test Selection: Run only changed tests
- Database Reset: Use faster cleanup methods
- Mocking: Mock external services
- 并行测试:使用标志
--maxWorkers - 测试选择:仅运行变更的测试
- 数据库重置:使用更快的清理方法
- 模拟:模拟外部服务
Database Connection Issues
数据库连接问题
- Connection Pooling: Limit concurrent connections
- Cleanup: Properly close connections after tests
- Retries: Implement connection retry logic
- Timeouts: Set appropriate connection timeouts
- 连接池:限制并发连接数
- 清理:测试后正确关闭连接
- 重试:实现连接重试逻辑
- 超时:设置合适的连接超时
Files Reference
文件参考
Scripts:
- - Initialize test environment
scripts/setup-test-env.sh - - Execute complete test suite
scripts/run-e2e-tests.sh - - Database E2E tests
scripts/test-database-workflow.sh - - Authentication E2E tests
scripts/test-auth-workflow.sh - - Vector search E2E tests
scripts/test-ai-features.sh - - Realtime E2E tests
scripts/test-realtime-workflow.sh - - Clean up test data
scripts/cleanup-test-resources.sh - - Validate database schema
scripts/validate-schema.sh - - Performance benchmarks
scripts/benchmark-vector-search.sh - - Reset test database
scripts/reset-test-db.sh
Templates:
- - Jest/Vitest boilerplate
templates/test-suite-template.ts - - Database operation tests
templates/database-tests.ts - - Authentication flow tests
templates/auth-tests.ts - - pgvector tests
templates/vector-search-tests.ts - - Realtime subscription tests
templates/realtime-tests.ts - - GitHub Actions CI/CD
templates/ci-config.yml - - Jest configuration
templates/jest.config.js - - Vitest configuration
templates/vitest.config.ts
Examples:
- - Full E2E testing guide
examples/complete-test-workflow.md - - CI/CD setup guide
examples/ci-cd-integration.md - - Test data management
examples/test-data-strategies.md - - Performance testing
examples/performance-benchmarks.md - - Mocking external services
examples/mocking-strategies.md
Plugin: supabase
Version: 1.0.0
Last Updated: 2025-10-26
脚本:
- - 初始化测试环境
scripts/setup-test-env.sh - - 执行完整测试套件
scripts/run-e2e-tests.sh - - 数据库端到端测试
scripts/test-database-workflow.sh - - 认证端到端测试
scripts/test-auth-workflow.sh - - 向量搜索端到端测试
scripts/test-ai-features.sh - - 实时功能端到端测试
scripts/test-realtime-workflow.sh - - 清理测试数据
scripts/cleanup-test-resources.sh - - 验证数据库模式
scripts/validate-schema.sh - - 性能基准测试
scripts/benchmark-vector-search.sh - - 重置测试数据库
scripts/reset-test-db.sh
模板:
- - Jest/Vitest模板
templates/test-suite-template.ts - - 数据库操作测试
templates/database-tests.ts - - 认证流程测试
templates/auth-tests.ts - - pgvector测试
templates/vector-search-tests.ts - - 实时订阅测试
templates/realtime-tests.ts - - GitHub Actions CI/CD配置
templates/ci-config.yml - - Jest配置
templates/jest.config.js - - Vitest配置
templates/vitest.config.ts
示例:
- - 完整E2E测试指南
examples/complete-test-workflow.md - - CI/CD设置指南
examples/ci-cd-integration.md - - 测试数据管理
examples/test-data-strategies.md - - 性能测试
examples/performance-benchmarks.md - - 外部服务模拟
examples/mocking-strategies.md
插件: supabase
版本: 1.0.0
最后更新: 2025-10-26