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

在Jest测试中是否需要模拟内置函数startsWith?

结论:不需要单独模拟startsWith内置函数

原因:

  • 真实场景中,req.headers.authorization是字符串类型(比如"Bearer xxx"),字符串本身就自带原生的startsWith方法,这个方法是JS标准内置的,行为完全可靠,不需要我们额外模拟。
  • 我们要测试的是自己的鉴权逻辑:当authorization符合要求(带Bearer前缀)、不符合要求(不带前缀/不存在)时,代码是否返回正确响应。没必要去验证JS原生方法的正确性。

你当前模拟代码的问题:

你把authorization模拟成了一个对象,还给它加了mock的startsWith方法,这和真实请求的结构完全不符——真实请求里authorization是字符串,不是对象,这种模拟会导致原鉴权逻辑的判断出错。

正确的模拟写法:

直接给authorization赋值成符合真实场景的字符串即可:

// 模拟带合法Bearer token的请求
const mockValidRequest = () => {
  return {
    headers: {
      authorization: "Bearer valid-token-here"
    },
  };
};

// 模拟不带Bearer前缀的非法请求
const mockInvalidRequest = () => {
  return {
    headers: {
      authorization: "InvalidTokenWithoutBearer"
    },
  };
};

// 模拟完全没有authorization的请求
const mockMissingAuthRequest = () => {
  return {
    headers: {}
  };
};

这样就能准确测试你的鉴权逻辑:比如用mockInvalidRequest时,代码应该返回403错误;用mockValidRequest时,应该跳过这个错误分支。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:35:39