我正在使用 supertest 测试 Express API。我正在尝试将主体参数传递到测试中,如下面的代码片段所示,但由于我收到主体参数未定义的错误消息,因此主体参数似乎未正确传递。
使用命令 mocha --recursive
运行测试会返回以下错误:
<小时/>Cannot read property 'email' of undefined
下面是文件 email-suite.js 中引用 supertest 的代码
'use strict';
var express = require("express");
var bodyParser = require('body-parser');
var mongoose = require("mongoose");
var app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
var supertest = require("supertest");
var chai = require("chai");
var should = chai.should();
var api = require("../server.js");
describe("Email Module", function() {
this.timeout(25000);
before(function(done){
mongoose.createConnection(/* connectionstring */);
mongoose.connection.on('open', function(err) {
if(err) console.log(err);
console.log('connected to server');
});
done();
});
it("Check Email Count", function(done) {
var body = { email: "email@email.com" };
supertest(api)
.post("/emailCount")
.set('Accept', 'application/json')
.send(body) // body is undefined
.expect(200)
.expect('Content-Type', /json/)
.end(function(err, res) {
if(err) return done(err);
res.body.count.should.equal(2);
done();
});
});
});
<小时/>
以下是文件 email-api.js 中的代码
'use strict';
var express = require("express");
var bodyParser = require('body-parser');
var router = express.Router();
var app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
router.post('/emailCount', function(req, res) {
var email = req.body.email; // req.body is undefined
}
module.exports = router;
<小时/>
下面是文件 server.js 中的代码
var express = require("express");
var app = express();
app.set("port", process.env.PORT || 3000);
var router = require("./user/email-api");
app.use('/', router);
app.listen(app.get("port"), function() {
console.log("App started on port " + app.get("port"));
});
module.exports = app;
最佳答案
将body-parser
始终放在express object
之后和主服务器文件中的每个路由之前
var app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
//路由器任务从这里开始
否则总是会得到未定义
,因为首先调用路由器,然后解析主体。
关于node.js - 请求主体在 super 测试中未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39470566/