Jest测试报错TypeError: req.headers.get is not a function求助
解决方案:TypeError: req.headers.get is not a function
问题根源
测试用例中createRequest生成的请求对象,其headers属性是普通JavaScript对象,而非标准Web API的Headers实例。业务代码里调用的req.headers.get()是Headers实例专属方法,普通对象没有这个方法,因此报错。
解决方法
方法1:将测试用的headers包装为Headers实例
直接在创建请求时,把headers转换成标准Headers对象,确保拥有get方法:
test('Must return values correctly', async () => { const req = createRequest({ method: 'GET', headers: new Headers({ Access: testAccessKey }) }) const res = await authorizeAccess(req); expect(res).toHaveProperty('id') })
注:如果你的createRequest工具不支持直接传入Headers实例,可尝试方法2或3。
方法2:在业务代码中兼容两种headers格式
修改authorizeAccess函数,同时支持标准Headers实例和普通对象格式的headers:
export async function authorizeAccess(req: Request): Promise<Response | {}> { // 封装通用的获取header方法,兼容两种格式 const getHeader = (name: string): string | null => { // 处理标准Headers实例 if (typeof req.headers.get === 'function') { return req.headers.get(name); } // 处理普通对象headers,忽略大小写匹配 const lowerCaseName = name.toLowerCase(); const headersObj = req.headers as Record<string, string>; return Object.entries(headersObj).find( ([key]) => key.toLowerCase() === lowerCaseName )?.[1] || null; }; const access = getHeader('Access'); if(!access) return Response.json('No access token provided',{status: 403, headers: {'content-type': 'application/json'}}) const data = await signIn(access) if(!data) return Response.json('Invalid token', {status: 401}) return data }
方法3:使用原生Request构造函数创建测试请求
跳过createRequest,直接用Web API原生的Request构造函数生成符合标准的请求对象:
test('Must return values correctly', async () => { const req = new Request('http://test-endpoint', { method: 'GET', headers: { Access: testAccessKey } }) const res = await authorizeAccess(req); expect(res).toHaveProperty('id') })
这种方式生成的req.headers必然是标准Headers实例,完全匹配业务代码的调用逻辑。
验证步骤
测试前可先打印req.headers的类型,确认是否为Headers实例:
console.log(req.headers instanceof Headers); // 预期输出true
内容的提问来源于stack exchange,提问作者Bittermann1287
相关产品推荐
相关产品推荐

