supertest访问res.body报错Cannot read properties of undefined
错误根因
Uncaught TypeError: Cannot read properties of undefined (reading 'body') 是因为接口请求触发错误时,回调函数入参res为undefined,你的代码没有做错误分支拦截,不管请求成功失败都会执行console.log(res.body),访问空值的属性就会抛错。
具体问题点
- 没有对请求错误做拦截处理:当前代码打印
err后没有中断执行,只要请求失败(网络异常、token失效、接口路径错误、服务端报错等场景),res为空时后续代码依然会运行 - 路径写法不规范:初始化supertest时传入的baseUrl结尾带了多余斜杠,get请求的路径没加开头斜杠,部分场景下会出现路径拼接错误,直接导致请求404
- 导入项不全:ESModule模式下运行mocha,只导入
describe没导入it也可能导致测试用例运行异常
修复后可运行代码
import { describe, it } from "mocha"; import supertest from "supertest"; import { expect } from "chai"; // 去掉baseUrl结尾多余斜杠 const request = supertest('https://gorest.co.in/public/v2'); const api_token = '45faa1e4b06b3cc1d5ecfbe639235376838cf638c85f88cb9bcc04e954bbf77f'; describe('GET /user' , () =>{ it('fetching user details', (done) =>{ // 路径开头补/,保证路径拼接正确 request.get(`/users?access-token=${api_token}`).end((err, res) =>{ // 存在错误直接终止用例,把错误抛给mocha展示 if (err) return done(err); console.log(res.body); done(); }) }) })
修复后如果依然请求失败,控制台会直接打印具体的错误信息(比如401鉴权失败、404接口不存在、超时等),顺着错误信息排查对应问题即可。
内容的提问来源于stack exchange,提问作者jessi pinkman
相关产品推荐
相关产品推荐

