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

使用Mocha+TypeScript测试含CallableContext的API方法遇类型错误求解

解决Firebase CallableContext测试的TypeScript类型错误

你遇到的错误是因为CallableContext类型中的rawRequest属性是必填的Request类型,不能赋值为undefined。以下是几种可行的解决方式:

方法1:模拟最小化Request对象

直接创建一个空对象并通过类型断言转为Request类型,满足TypeScript的类型检查即可(测试中若无需使用rawRequest的具体功能,这种方式足够):

import { CallableContext, AuthData } from "firebase-functions/lib/common/providers/https";
// 若需要Request类型,可导入:import { Request } from "express";

const mockRawRequest = {} as Request;

const callableContext: CallableContext = {
  rawRequest: mockRawRequest,
  auth: {
    uid: "somFaciliatator",
  } as AuthData,
};

it("should call method", async () => {
  const data = {
    users: [
      {
        firstName: "Sky",
        lastName: "Stars",
      },
    ],
  };
      
  const service = new GroupService(admin.firestore(), {
    userId: "someFacilitator",
    admin,
  });
  
  await service.addNonAppUserToGroup(data, callableContext);
});

方法2:使用Partial类型转换

先定义包含核心属性的对象,再通过类型断言转为CallableContext,同时确保必填属性都已提供:

const callableContext = {
  auth: {
    uid: "somFaciliatator",
  } as AuthData,
  rawRequest: {} as Request,
} as CallableContext;

方法3:模拟完整Request对象(可选)

如果测试中需要用到rawRequest的具体属性,可以模拟更贴近真实场景的Request对象:

const mockRawRequest = {
  method: "POST",
  url: "/add-non-app-user-to-group",
  headers: {
    "content-type": "application/json",
  },
} as Request;

const callableContext: CallableContext = {
  rawRequest: mockRawRequest,
  auth: {
    uid: "somFaciliatator",
  } as AuthData,
};

以上三种方式都能解决Type 'undefined' is not assignable to type 'Request'的类型错误,根据你的测试需求选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 12:47:39