使用MySQL使用书架测试项目时随机超时



我第一次运行测试规格所有测试都会通过,但是,如果我继续运行并运行一次,则会导致测试的超时,以检查当外键时是否返回错误值无效。

这是我的代码上的错误还是与书架甚至摩托马有关的已知问题?

这是我的测试规格:

var _ = require('lodash'),
    ModelsTaskList = require('../../models/taskList'),
    TaskList = ModelsTaskList.TaskList,
    server = require('../../index'),
    chai = require('chai'),
    chaiHttp = require('chai-http'),
    should = chai.should(),
    faker = require('faker');
chai.use(chaiHttp);
describe('TaskLists controller', function() {
    describe('/POST tasklists', () => {
        it('should not POST a tasklist without a status', (done) => {
            var wrong_tasklist = _.clone(test_tasklist);
            wrong_tasklist.statusId = undefined;
            chai.request(server)
                .post('/api/tasklists')
                .send(wrong_tasklist)
                .end((err, res) => {
                    res.should.have.status(200);
                    res.body.should.be.an('object');
                    res.body.should.have.property('error');
                    done();
                });
        });
        it('should not POST a tasklist with an invalid status', (done) => {
            var wrong_tasklist = _.clone(test_tasklist);
            wrong_tasklist.statusId = 99;
            chai.request(server)
                .post('/api/tasklists')
                .send(wrong_tasklist)
                .end((err, res) => {
                    res.should.have.status(200);
                    res.body.should.be.an('object');
                    res.body.should.have.property('error');
                    done();
                });
        });
        it('should not POST a tasklist without a user ID', (done) => {
            var wrong_tasklist = _.clone(test_tasklist);
            wrong_tasklist.createdBy = undefined;
            chai.request(server)
                .post('/api/tasklists')
                .send(wrong_tasklist)
                .end((err, res) => {
                    res.should.have.status(200);
                    res.body.should.be.an('object');
                    res.body.should.have.property('error');
                    done();
                });
        });
        it('should not POST a tasklist with an invalid user ID', (done) => {
            var wrong_tasklist = _.clone(test_tasklist);
            wrong_tasklist.createdBy = 99;
            chai.request(server)
                .post('/api/tasklists')
                .send(wrong_tasklist)
                .end((err, res) => {
                    res.should.have.status(200);
                    res.body.should.be.an('object');
                    res.body.should.have.property('error');
                    done();
                });
        });
        it('should not POST a tasklist with an estimated end date before the start date', (done) => {
            var wrong_tasklist = _.clone(test_tasklist);
            wrong_tasklist.startDate = faker.date.recent(1);
            wrong_tasklist.estimatedEndDate = faker.date.recent(2);
            chai.request(server)
                .post('/api/tasklists')
                .send(wrong_tasklist)
                .end((err, res) => {
                    res.should.have.status(200);
                    res.body.should.be.an('object');
                    res.body.should.have.property('error');
                    done();
                });
        });
    })
});

我得到的第一个执行:

/邮政任务列表 ✓不应发布没有状态的任务列表(49ms) ✓不应发布具有无效状态的任务列表 ✓不应在没有用户ID的情况下发布任务列表 ✓不应使用无效的用户ID发布任务列表 ✓不应在开始日期之前以估计的结束日期发布任务列表

和下一个执行:

    /POST tasklists
      ✓ should not POST a tasklist without a status
      1) should not POST a tasklist with an invalid status
      ✓ should not POST a tasklist without a user ID
      2) should not POST a tasklist with an invalid user ID
      ✓ should not POST a tasklist with an estimated end date before the start date

  4 passing (8s)
  2 failing
  1) TaskLists controller /POST tasklists should not POST a tasklist with an invalid status:
     Error: Timeout of 4000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

  2) TaskLists controller /POST tasklists should not POST a tasklist with an invalid user ID:
     Error: Timeout of 4000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

,这是发布到/api/taskelist时执行的代码:

var ModelsTaskList = require('../models/taskList'),
    TaskList = ModelsTaskList.TaskList,
    moment = require('moment'),
    ctlr;
var handleError = function (res, message) {
    res.json({
        status: false,
        tasklist: null,
        error: message
    });
};
ctlr = {
    create: function (req, res) { 
        if (req.body.statusId === undefined) {
            handleError(res, 'ID do status não informado');
        } 
        else if (req.body.createdBy === undefined) {
            handleError(res, 'ID do usuário não informado');
        }
        else if (req.body.startDate !== undefined) {
            var startDate = moment(req.body.startDate);
            if (req.body.estimatedEndDate !== undefined) {
                if (moment(req.body.estimatedEndDate).isBefore(startDate)) {
                    handleError(res, 'Data estimada de conclusão deve ser maior que a data de início');
                }
            }
        }            
        else {
            TaskList.forge(req.body)
                .save({ method: 'insert', require: true })
                .then(result => {
                    res.json({
                        status: true,
                        tasklist: result,
                        error: null
                    });
                })
                .catch(err => {
                    handleError(res, err.message);
                });
        }
    },
    read: function (req, res) {
    }
};
module.exports = ctlr;

这是我的代码中的错误。根据数据库条件和发送的数据,以下else if语句不会发送任何响应,从而导致超时:

    else if (req.body.startDate !== undefined) {
                var startDate = moment(req.body.startDate);
                if (req.body.estimatedEndDate !== undefined) {
                    if (moment(req.body.estimatedEndDate).isBefore(startDate)) {
                        handleError(res, 'Data estimada de conclusão deve ser maior que a data de início');
                    }
                }
                // I MISSED AN ELSE HERE
            }

这是我的错。

最新更新