Chai.request.agent请求间Cookie不持久化问题求助
问题根源分析
Secure Cookie 在 HTTP 环境下不被存储
后端设置 Cookie 时指定了secure: true,该属性要求 Cookie 仅在 HTTPS 协议下才会被客户端保存。而测试环境通常使用 HTTP 协议,Chai 的 agent(底层基于 superagent)会忽略这个 Cookie,导致后续请求无法携带。Cookie 名访问语法错误
后端校验 Cookie 时使用了cookies?.my-cookie,由于 Cookie 名包含连字符,点语法会被 JavaScript 解析为cookies.my - cookie(减法运算),而非访问名为my-cookie的属性,导致错误判断 Cookie 不存在。
修复步骤
1. 修正后端 Cookie 校验代码
将后端 /my-other-endpoint 中的判断逻辑改为括号访问方式:
// 原错误代码 if (!cookies?.my-cookie) { // 修正后 if (!cookies?.['my-cookie']) {
2. 适配测试环境的 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
相关产品推荐
相关产品推荐

