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

使用supertest时GET请求遇类型错误:string无法分配给set-cookie参数

问题分析与解决

核心错误点

  1. POST请求结果处理错误
    你直接把await request(app).post(...)的结果赋值给bookId,但这个结果是supertest的Response对象,不是接口返回的bookId。所以bookId === undefined的判断永远不会触发,因为Response对象不可能是undefined。

  2. GET请求结果赋值错误
    即使进入if逻辑,你把allBooks(同样是Response对象)直接赋值给bookId,这显然不符合预期,应该从响应体中提取需要的ID。

  3. 类型/方法警告的可能原因

  • 如果你用TypeScript,可能未正确安装@types/supertest类型定义包,导致IDE无法识别set方法的类型。
  • 少数旧版本supertest的set方法对对象参数的支持有问题,可以改用链式调用单个设置头的写法规避。

修正后的代码示例

// 处理POST请求
const postRes = await request(app)
  .post("/books/add-one-book")
  .send({
    "name":"bookTest",
    "chapters": 1
  });

// 检查POST是否成功(根据实际接口返回的状态码/响应体判断)
let bookId = postRes.body.id; // 假设接口返回的body里包含book的id字段
if (!bookId) {
  // 执行GET请求获取所有书籍
  const getRes = await request(app)
    .get("/books/all-books")
    .set('Authorization', `Bearer ${token}`); // 改用单个设置头的方式,避免类型警告

  // 从GET响应体中取第一个书籍的id(根据你的业务逻辑调整)
  if (getRes.body.length > 0) {
    bookId = getRes.body[0].id;
  }
}

额外注意事项

  • 确认接口的实际返回结构:POST成功时是否在响应体返回id,GET接口是否返回书籍数组。
  • 若使用TypeScript,执行npm install @types/supertest --save-dev安装类型定义,解决IDE的类型警告。
  • 可以添加状态码判断,比如if (postRes.statusCode !== 201)(假设创建成功返回201),更准确地判断POST请求是否失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:25:10