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

导出带参函数遇ReferenceError,Node.js+Express+Jest测试问题

解决Jest测试Express后端时的ReferenceError:u is not defined

咱们先直接揪出问题的根源:你在导出checkCredentials函数的时候犯了一个小错误——你直接调用了函数,而不是导出函数本身。

看你写的这行代码:

exports.checkCredentials = checkCredentials(u,p);

这里u和p在当前上下文里根本没有定义,Node.js执行到这一行的时候,会尝试去调用checkCredentials(u,p),但找不到u和p,自然就抛出了ReferenceError: u is not defined。

第一步:修正导出代码

你需要导出的是函数的引用,而不是函数执行后的结果。把上面那行改成:

exports.checkCredentials = checkCredentials;
module.exports = app;

这样导出后,在测试文件里你就能自己传入参数调用这个函数了。

第二步:修正测试代码的问题

你的测试代码还有几个需要调整的地方,才能正常工作:

1. 确保发送POST请求的Body数据

后端的req.body.username和req.body.password需要你在测试里通过请求发送,不然req.body会是空的,验证肯定失败。

2. 调整异步测试的结构

Jest处理异步测试需要正确使用done回调,或者返回Promise。结合supertest(假设你用的是这个库来测试接口),可以更简洁地写测试。

修正后的测试文件示例:

const request = require('supertest');
const app = require('../path/to/your/app-file'); // 替换成你的实际文件路径

describe('Login', () => {
  // 先单独测试checkCredentials工具函数
  test('checkCredentials returns true for valid credentials', () => {
    expect(app.checkCredentials('user', 'password')).toBe(true);
  });

  // 测试合法凭证的POST请求
  test('POST /home returns 200 with valid credentials', (done) => {
    request(app)
      .post('/home')
      .send({ username: 'user', password: 'password' }) // 发送请求体
      .expect(200)
      .end((err) => {
        if (err) return done(err);
        done();
      });
  });

  // 测试非法凭证的POST请求
  test('POST /home redirects to /login with invalid credentials', (done) => {
    request(app)
      .post('/home')
      .send({ username: 'wrong-user', password: 'wrong-pass' })
      .expect(302) // 重定向的状态码是302
      .expect('Location', '/login')
      .end((err) => {
        if (err) return done(err);
        done();
      });
  });
});

额外说明

  • 把工具函数(比如checkCredentials)和接口测试分开,能让你的测试更清晰,也更容易定位问题。
  • 如果你还没安装supertest,需要先执行npm install supertest --save-dev。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:07:54