node.js / express / mocha 测试 post 请求问题

node.js / express / mocha testing post request issue

我使用 node.js + expressjs 构建了一个应用程序,并使用 mocha 来测试我的 post 请求。我的测试失败了,因为我的 post 请求的响应是 null 但我不知道为什么...

我的API:

api.post('/api/addreport', function(req, res) {
    console.log('add report hit..'); //this does not print during testing
    console.log(req.body); //this does not print during testing
    res.sendStatus(200);
});

我的测试:

var express = require('express');
var app = express();
var chai = require('chai');
var expect = require('chai').expect;
var should = require('should');
var supertest = require('supertest');
var server = supertest.agent("https://localhost:3001");
var request = require('supertest');
var bodyParser = require('body-parser');


//Body parser
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

it("should post", function(done){
request(app.listen())
    .post('/api/addreport/')
    .send(data)
    .end(function(res){
        console.log('---response---');
        console.log(res); //returns null
        expect(res.status).to.equal(200); //returns status of null
        done();
   })
});

运行 mocha ajax 结果:

 1)  should post:
 Uncaught TypeError: Cannot read property 'status' of null

我的数据:

var data = {
    report_id: 'abc123' + Math.random(10),
    project_code: 'test_project_code',
    startDate: '2016-01-01',
    endDate: '2016-01-15',
};

有人可以帮忙吗?

提前致谢!

如果您使用的是 supertest,则不需要在任何端口启动您的应用程序。只需在超测请求中添加 app.listen

var express = require('express');
var app = express();
var chai = require('chai');
var expect = require('chai').expect;
var should = require('should');
var supertest = require('supertest');
var server = supertest.agent("https://localhost:3001");
var request = require('supertest');
var bodyParser = require('body-parser');


//Body parser
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

it("should add report", function(done){
request(app.listen()) // change here
.post('/api/addreport/')
.send(data)
.expect(200)
.end(function(err,res){
  done();
});
});