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

全局覆盖cy.request()设置Bearer授权头遇401错误,求排查

解决Cypress cy.request()全局Bearer授权头未生效的问题

可能的问题及解决方案

1. 环境变量authorizationToken未正确设置

如果Cypress.env('authorizationToken')的值为undefined,生成的授权头会是Bearer undefined,这会导致服务端返回401。

验证方式:在覆盖函数中添加日志输出,确认token是否存在:

Cypress.Commands.overwrite('request', (originalFn, ...options) => {
    const optionsObject = options[0];
    console.log('当前Token:', Cypress.env('authorizationToken')); // 新增日志
    if (optionsObject === Object(optionsObject)) {
      optionsObject.headers = {
        authorization: `Bearer ${Cypress.env('authorizationToken')}`,
        ...optionsObject.headers,
      };
      return originalFn(optionsObject);
    }
    return originalFn(...options);
});

如果日志显示undefined,请按以下方式设置token:

  • 方式一:在项目根目录创建cypress.env.json文件:
    {
      "authorizationToken": "你的有效Bearer令牌"
    }
    
  • 方式二:在cypress.config.ts中配置环境变量:
    import { defineConfig } from 'cypress';
    
    export default defineConfig({
      e2e: {
        env: {
          authorizationToken: "你的有效Bearer令牌"
        }
      }
    });
    

2. 授权头键名大小写问题

部分服务端对HTTP头的大小写敏感,authorization(小写a)可能不被识别,建议改为标准的Authorization(大写A):

optionsObject.headers = {
  Authorization: `Bearer ${Cypress.env('authorizationToken')}`, // 改为大写A
  ...optionsObject.headers,
};

3. 自定义命令未被正确加载

确保support/commands.ts中的覆盖逻辑已被导入到Cypress的支持文件中:
在support/e2e.ts中添加:

import './commands';

如果缺少此导入,自定义命令不会生效,cy.request仍会使用原生实现。

4. 未处理cy.request的所有调用签名

当前代码仅处理了cy.request(optionsObject)的调用方式,若使用其他签名(如cy.request(method, url)或cy.request(method, url, body)),授权头不会被添加。可以修改覆盖函数以支持所有签名:

Cypress.Commands.overwrite('request', (originalFn, ...args) => {
  let requestOptions = {};

  // 解析不同的调用签名
  if (typeof args[0] === 'object' && args[0] !== null) {
    requestOptions = args[0];
  } else if (args.length >= 2) {
    requestOptions = {
      method: args[0],
      url: args[1],
      ...(args.length === 3 && { body: args[2] })
    };
  }

  // 添加授权头
  requestOptions.headers = {
    Authorization: `Bearer ${Cypress.env('authorizationToken')}`,
    ...requestOptions.headers,
  };

  return originalFn(requestOptions);
});

验证修复

修改完成后,重新运行测试,检查请求头是否包含正确的Authorization: Bearer <token>。可以在Cypress的Network面板中查看请求的Headers,确认授权头已正确添加。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:12:13