【发布时间】:2016-11-06 07:51:47
【问题描述】:
未处理的拒绝 SequelizeDatabaseError: SQLITE_ERROR: no such table: 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();
});
});
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 以便它等到数据库加载?
我已经搜索过,但似乎只有猫鼬特定的东西,而且我正在使用 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();
});
});
【问题讨论】:
-
如果您自己解决了问题+认为它可能对其他人有用,您也应该创建答案。不要包括回答你的问题!
-
如果您认为它对其他人没有用处,请删除问题以减少 SO 上的噪音。