如何在Flutter中Mock Supabase客户端?
如何在Flutter测试中Mock Supabase客户端?
你提到的mock_supabase_http_client库确实可以解决Supabase客户端的Mock问题,以下是具体实现步骤:
1. 添加依赖
在项目的pubspec.yaml中,将库添加到开发依赖:
dev_dependencies: test: ^1.24.0 mock_supabase_http_client: ^最新版本号
执行flutter pub get完成依赖安装。
2. 基础Mock示例
模拟用户认证场景
比如测试登录功能,可Mock Supabase认证接口返回预设用户信息:
import 'package:mock_supabase_http_client/mock_supabase_http_client.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; import 'package:test/test.dart'; void main() { test('测试登录成功', () async { // 创建Mock客户端实例 final mockClient = MockSupabaseHttpClient(); // 模拟登录接口返回成功数据 mockClient.addResponse( method: HttpMethod.post, path: '/auth/v1/token', response: { 'access_token': 'mock-token', 'user': {'id': 'mock-user-id', 'email': 'test@example.com'} }, ); // 初始化Supabase客户端并绑定Mock实例 await Supabase.initialize( url: 'https://your-project.supabase.co', anonKey: 'your-anon-key', httpClient: mockClient, ); final supabase = Supabase.instance.client; // 执行登录请求 final response = await supabase.auth.signInWithPassword( email: 'test@example.com', password: 'password123', ); // 验证结果符合预期 expect(response.user?.email, 'test@example.com'); expect(response.session?.accessToken, 'mock-token'); }); }
模拟数据库查询场景
测试从Supabase数据库获取数据的逻辑时,可模拟查询接口返回:
test('测试查询数据', () async { final mockClient = MockSupabaseHttpClient(); // 模拟查询接口返回数据列表 mockClient.addResponse( method: HttpMethod.get, path: '/rest/v1/your-table', response: [ {'id': 1, 'name': '测试数据1'}, {'id': 2, 'name': '测试数据2'}, ], ); await Supabase.initialize( url: 'https://your-project.supabase.co', anonKey: 'your-anon-key', httpClient: mockClient, ); final supabase = Supabase.instance.client; final data = await supabase.from('your-table').select().execute(); // 验证返回数据正确性 expect(data.data.length, 2); expect(data.data[0]['name'], '测试数据1'); });
3. 注意事项
- 确保Mock的
path和method与Supabase实际接口完全匹配,比如认证接口路径、数据库查询路径 - 可通过
mockClient.verify()验证特定请求是否被发起,保障测试逻辑完整性 - 若需模拟错误场景(如登录失败),只需在
addResponse中返回对应错误状态码和信息即可
内容的提问来源于stack exchange,提问作者Dilan Felipe Bernal Castaño
相关产品推荐
相关产品推荐

