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

使用Jest&Supertest测试NodeJS时遭遇404错误求助

解决测试中/api/jobs接口404的思路

以下是针对测试用例返回404、但Postman调用正常问题的排查方向:

  • 校验.env文件加载路径
    测试代码中通过require("dotenv").config({ path: "../.env" })加载环境变量,确认测试文件所在目录与.env的相对路径是否准确。Postman使用的是项目运行环境的配置,而测试环境可能因文件层级差异导致环境变量加载失败,进而引发数据库连接、路由配置等问题。

  • 确认登录接口的有效性
    在测试代码中添加日志,检查登录请求是否成功获取到合法token:

    const token = await request(apps).post("/api/users/login").send({
      email: process.env.EMAIL,
      password: process.env.PASSWORD,
    });
    // 添加日志查看登录响应
    console.log('登录状态码:', token.statusCode);
    console.log('登录返回内容:', token.body);
    

    如果登录请求本身返回错误(如401),后续携带无效token请求jobs接口可能被权限拦截,部分权限中间件会将未授权请求返回404而非403。

  • 检查Express实例的路由挂载
    确认../app中导出的Express实例是否已正确挂载/api/jobs路由。避免出现路由在app.listen()之后才挂载的情况,这种场景下测试时路由尚未生效,会返回404。

  • 验证数据库连接状态
    在beforeEach中添加日志,确认数据库是否成功连接:

    beforeEach(async () => {
      await mongoose.connect(process.env.DATABASE);
      console.log('数据库连接状态:', mongoose.connection.readyState); // 1代表已连接
    });
    

    若数据库连接失败,jobs接口可能因查询报错或中间件逻辑异常返回404。

  • 核对接口路径的一致性
    检查测试中请求的/api/jobs与Postman调用的路径是否完全一致,包括末尾斜杠、大小写等细节。部分路由配置会严格匹配路径格式,细微差异可能导致路由匹配失败。

  • 检查权限验证的格式
    确认请求头中的Authorization格式是否正确:"bearer " + token.body.token,注意bearer后的空格是否存在,以及是否存在大小写错误(如写成Bearer),部分权限中间件对格式要求严格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:47:17