使用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
相关产品推荐
相关产品推荐

