You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 10:34:55