摩卡测试未达到第二Express回调并返回第一

时间:2018-10-12 20:33:08

标签: node.js express mocha

我需要以下代码的帮助。我正在测试向特定端点发送请求的服务,我需要捕获请求的主体(为此使用节点表示)。跑步者是摩卡测试,有1个以上的阻止。 当我调试测试时,第一个it块按预期工作(声明通过),但是当控件到达第二个it块时,一旦请求被发布,则控件又回到第一个块,并且第二个块中的断言永远不会到达。我在这里做什么错了?

{
    var express = require("express");
    var bodyPaser = require('body-parser');
    var expressObj = new express();
    expressObj.use(bodyPaser.json());

    describe('describe', function () {
        before('describe', function () {
            expressObj.listen(8080);
        });

        it('first It', function (done) {
            expressObj.post('/mytest/first', function (req, res) {
                res.send("Hello");
                //  assert.equal(JSON.stringify(req.body), JSON.stringify('first":test'));
                done();
            });
        });

        it('second it', function (done) {
            expressObj.post('/mytest/first', function (req, res) {
                res.send("Hello");
                //  assert.equal(JSON.stringify(req.body), JSON.stringify('first":test'));
                done();
            });
        });
    });

1 个答案:

答案 0 :(得分:0)

第一次和第二次测试仅是设置路由,但实际上并没有向所描述的任何一条路由发送请求。因此测试开始了,但是第一个实际上并没有执行任何操作,因此从未调用完成,这就是为什么第二个测试根本没有开始运行的原因。要测试这些路由,您需要在定义它们之后为每个路由创建一个请求。这是您的代码的有效演示:

var express = require("express");
var bodyPaser = require('body-parser');
var expressObj = new express();
expressObj.use(bodyPaser.json());
const request = require('request');

describe('describe', function () {
    before('describe', function (done) {
        expressObj.listen(8080, function(err) {
          if(err) {
            console.error(err);
            done(err);
            return;
          }

          console.log('listening on localhost:8080');
          done();
        });
    });

    it('first It', function (done) {
        expressObj.post('/mytest/first', function (req, res) {
                        res.send("Hello");
            //  assert.equal(JSON.stringify(req.body), JSON.stringify('first":test'));
            done();
        });
        request.post('http://localhost:8080/mytest/first');
    });

    it('second it', function (done) {
        expressObj.post('/mytest/second', function (req, res) {
            res.send("Hello");
            //  assert.equal(JSON.stringify(req.body), JSON.stringify('first":test'));
            done();
        });

        request.post('http://localhost:8080/mytest/second');
    });
});