Node.js 如何设置Mocha测试文件以避免后续加载错误?

Node.js 如何设置Mocha测试文件以避免后续加载错误?,node.js,express,mocha.js,Node.js,Express,Mocha.js,未处理的拒绝SequelizeDatabaseError:SQLITE_错误:没有这样的表:servings是我在运行测试时收到的错误 routes.js db.food.create(body).then(food => { db.serving.create({portion, description}).then(serving => { food.addServings(serving).then( () => { return food.rel

未处理的拒绝SequelizeDatabaseError:SQLITE_错误:没有这样的表:servings是我在运行测试时收到的错误

routes.js

db.food.create(body).then(food => {
  db.serving.create({portion, description}).then(serving => {
    food.addServings(serving).then( () => {
      return food.reload();
    }).then( () => {
      res.json(food);
    });
  });
}, e => {
  res.status(400).json(e);
});
server.test.js

    const should = require('chai').should();
    const expect = require('chai').expect;
    const supertest = require('supertest');

    const {app} = require('./../server.js');

    describe('Food', () => {
      describe('POST /foods', () => {
        it('should create a new food', (done) => {
         const egg = {
        "portion": 50,
        "name": "large egg",
        "description": "large egg",
        "calories": 80,
        "protein": 8,
        "carbs": 0,
        "fat": 3
      };

  supertest(app)
    .post('/foods')
    .send(egg)
    .expect(200)
    .end((err, res) => {
      if (err) {
        return done(err);
      }

      expect(res.body).to.be.an('object');
      expect(res.body).to.have.property('carbs');
      expect(res.body).to.not.have.property('portion');
      done();
    });
});
    db.sequelize.sync({force: true}).then(function() {
        app.listen(port, function() {
            console.log(`Express running on port# ${port}`);
        });
    });

    let routes = require('./routes')(app, db);

    module.exports = {app};
        db.sequelize.sync({force: true}).then(function() {
            app.listen(port, function() {
                console.log(`Express running on port# ${port}`);

                let routes = require('./routes')(app, db);


                app.emit('serverStarted');
            });
        });

server.js

    const should = require('chai').should();
    const expect = require('chai').expect;
    const supertest = require('supertest');

    const {app} = require('./../server.js');

    describe('Food', () => {
      describe('POST /foods', () => {
        it('should create a new food', (done) => {
         const egg = {
        "portion": 50,
        "name": "large egg",
        "description": "large egg",
        "calories": 80,
        "protein": 8,
        "carbs": 0,
        "fat": 3
      };

  supertest(app)
    .post('/foods')
    .send(egg)
    .expect(200)
    .end((err, res) => {
      if (err) {
        return done(err);
      }

      expect(res.body).to.be.an('object');
      expect(res.body).to.have.property('carbs');
      expect(res.body).to.not.have.property('portion');
      done();
    });
});
    db.sequelize.sync({force: true}).then(function() {
        app.listen(port, function() {
            console.log(`Express running on port# ${port}`);
        });
    });

    let routes = require('./routes')(app, db);

    module.exports = {app};
        db.sequelize.sync({force: true}).then(function() {
            app.listen(port, function() {
                console.log(`Express running on port# ${port}`);

                let routes = require('./routes')(app, db);


                app.emit('serverStarted');
            });
        });
我认为问题的出现是因为express和数据库在测试开始运行时没有加载。后续的测试很好,只是第一个没有正确写入数据库的测试

是否有一种方法可以更改测试文件或我的server.js,使其等待数据库加载

我已经搜索过了,但似乎只有猫鼬特有的东西,我正在使用sequelize

编辑-已解决

    db.sequelize.sync({force: true}).then(function() {
        app.listen(port, function() {
            console.log(`Express running on port# ${port}`);

            let routes = require('./routes')(app, db);


            app.emit('serverStarted');
        });
    });
然后在测试前做这个

    before(done => {
      app.on('serverStarted', () => {
        done();
      });
    });

server.js

    const should = require('chai').should();
    const expect = require('chai').expect;
    const supertest = require('supertest');

    const {app} = require('./../server.js');

    describe('Food', () => {
      describe('POST /foods', () => {
        it('should create a new food', (done) => {
         const egg = {
        "portion": 50,
        "name": "large egg",
        "description": "large egg",
        "calories": 80,
        "protein": 8,
        "carbs": 0,
        "fat": 3
      };

  supertest(app)
    .post('/foods')
    .send(egg)
    .expect(200)
    .end((err, res) => {
      if (err) {
        return done(err);
      }

      expect(res.body).to.be.an('object');
      expect(res.body).to.have.property('carbs');
      expect(res.body).to.not.have.property('portion');
      done();
    });
});
    db.sequelize.sync({force: true}).then(function() {
        app.listen(port, function() {
            console.log(`Express running on port# ${port}`);
        });
    });

    let routes = require('./routes')(app, db);

    module.exports = {app};
        db.sequelize.sync({force: true}).then(function() {
            app.listen(port, function() {
                console.log(`Express running on port# ${port}`);

                let routes = require('./routes')(app, db);


                app.emit('serverStarted');
            });
        });
然后在测试文件中的测试之前执行此操作

before(done => {
  app.on('serverStarted', () => {
    done();
  });
});

若你们自己解决了你们的问题,并且认为它可能对其他人有用,你们也应该创造答案。不要回答你的问题!如果你不认为这对其他人有用,那么就删除这个问题以减少噪音。