使用supertest时GET请求遇类型错误:string无法分配给set-cookie参数
问题分析与解决
核心错误点
POST请求结果处理错误
你直接把await request(app).post(...)的结果赋值给bookId,但这个结果是supertest的Response对象,不是接口返回的bookId。所以bookId === undefined的判断永远不会触发,因为Response对象不可能是undefined。GET请求结果赋值错误
即使进入if逻辑,你把allBooks(同样是Response对象)直接赋值给bookId,这显然不符合预期,应该从响应体中提取需要的ID。类型/方法警告的可能原因
- 如果你用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
相关产品推荐
相关产品推荐

