未处理的拒绝SequelizeDatabaseError:SQLITE_ERROR:没有这样的表:服务是我在运行测试时收到的错误。
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();
});
});
server.js
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};
我认为问题出现是因为express和数据库在测试开始运行时没有加载。后续测试很好,它只是第一个没有正确写入数据库的测试。
有没有办法可以更改测试文件或我的server.js,以便它等到数据库加载?
我搜索过,但似乎只有mongoose特定的东西,我正在使用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();
});
});
答案 0 :(得分:1)
<强> server.js 强>
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();
});
});