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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 20:38:27