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

Node.js单元测试报错:TypeError: request.post(...).send is not a function

问题解决:TypeError: request.post(...).send is not a function

你报错的核心原因是错误地把Express实例当成了HTTP请求工具。你代码里的const request = express();创建的是一个新的Express应用,它的post方法是用来定义后端路由的,根本没有.send()方法,自然会报错。

要测试Express应用的HTTP接口,你需要用专门的测试工具supertest,步骤如下:

1. 安装supertest

在项目根目录执行命令:

npm install supertest --save-dev

2. 修改你的test.js代码

把原来错误的request定义替换成supertest,并且用它包裹你的Express应用实例app:

const chai = require("chai");
const expect = chai.expect;
const app = require("./app.js");
// 替换掉原来的express(),改成引入supertest
const request = require('supertest');

describe("POST /register", () => {
  it("should register a new user and redirect to login page", (done) => {
    const user = {
      email: "johndoe@example.com",
      username: "johndoe",
      password: "password",
      userType: "user"
    };
    // 用request(app)来发起请求,而不是直接用request.post
    request(app)
      .post("/register")
      .send(user)
      .end((err, res) => {
        expect(res.status).to.equal(302);
        expect(res.header.location).to.equal("/login");
        done();
      });
  });
});

额外注意事项

  • 确保你的app.js导出的是Express实例,不要在app.js里直接写app.listen(3000),建议把启动服务器的代码单独放在server.js里,比如:
    // server.js
    const app = require('./app.js');
    app.listen(3000, () => console.log('Server running'));
    
    这样测试时只会加载Express实例,不会重复启动服务器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:17:05