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

Chai.request.agent请求间Cookie不持久化问题求助

问题根源分析

  1. Secure Cookie 在 HTTP 环境下不被存储
    后端设置 Cookie 时指定了 secure: true,该属性要求 Cookie 仅在 HTTPS 协议下才会被客户端保存。而测试环境通常使用 HTTP 协议,Chai 的 agent(底层基于 superagent)会忽略这个 Cookie,导致后续请求无法携带。

  2. Cookie 名访问语法错误
    后端校验 Cookie 时使用了 cookies?.my-cookie,由于 Cookie 名包含连字符,点语法会被 JavaScript 解析为 cookies.my - cookie(减法运算),而非访问名为 my-cookie 的属性,导致错误判断 Cookie 不存在。

修复步骤

将后端 /my-other-endpoint 中的判断逻辑改为括号访问方式:

// 原错误代码
if (!cookies?.my-cookie) {
// 修正后
if (!cookies?.['my-cookie']) {

修改后端设置 Cookie 的代码,根据环境变量动态设置 secure 属性,仅在生产环境开启:

res.cookie("my-cookie", token, {
  httpOnly: true,
  maxAge: 60 * 60 * 12 * 1000,
  secure: process.env.NODE_ENV === 'production', // 生产环境才启用secure
  sameSite: "strict",
});

如果测试时无法通过环境变量区分,也可以直接在测试环境将 secure 设为 false,确保 Cookie 能被 Chai agent 存储。

3. 验证测试代码逻辑

你的测试代码中 agent 的创建和销毁逻辑是正确的,确保 app 实例正确传入 chai.request.agent(app) 即可。

完成以上修改后,重新运行测试,Chai agent 就能在第二个请求中正确携带 Cookie,后端也能正确校验到 Cookie,避免 401 错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 04:48:30