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

如何Mock返回值需被使用的Firebase Functions HttpCallableResult(Flutter)

解决Firebase可调用函数Mock报错的方案

你的报错核心原因是:链式调用when(functions.httpsCallable("generateMatch").call())时,会重新执行一次httpsCallable方法,而这次调用没有对应的Stub,Mockito自动生成了一个Fake对象,当你调用它的call方法时就触发了错误。

修正后的Mock代码

final functions = MockFirebaseFunctions();

// 1. 先创建并Stub好HttpsCallable实例的call方法
final mockCallable = MockHttpsCallable();
final mockResult = MockHttpsCallableResult();
when(mockResult.data).thenReturn({"statusCode": 200});
when(mockCallable.call()).thenAnswer((_) async => mockResult);

// 2. 让FirebaseFunctions的httpsCallable返回这个已经配置好的实例
when(functions.httpsCallable("generateMatch")).thenReturn(mockCallable);

模拟调用错误的场景

如果需要模拟函数调用失败(比如抛出HttpsCallableException),可以修改call方法的Stub:

when(mockCallable.call()).thenThrow(HttpsCallableException(
  code: "invalid-request",
  message: "参数错误",
  details: {"field": "userId", "error": "不能为空"},
));

为什么原来的写法不行

Mockito的when方法处理链式调用时,functions.httpsCallable("generateMatch")会被实际执行一次,而不是复用你之前写的第一个Stub。所以必须先单独配置好HttpsCallable实例的行为,再让FirebaseFunctions返回这个预配置的实例,才能避免Fake对象被意外调用的错误。

内容的提问来源于stack exchange,提问作者Garrett

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:15:04