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里,比如:
这样测试时只会加载Express实例,不会重复启动服务器。// server.js const app = require('./app.js'); app.listen(3000, () => console.log('Server running'));
内容的提问来源于stack exchange,提问作者Lex_X
相关产品推荐
相关产品推荐

