我创建了一个 post api 并使用 mongoose 模型将请求数据保存到数据库。然后我使用邮递员来测试这个api。一切正常。一切正常我的意思是创建集合,将数据保存到集合中,并从响应中获取数据。看下面的代码
const eSchema = new mongoose.Schema({
model: String,
year: Number,
price: Number
});
const eModel = mongoose.model('bmw', eSchema);
app.post('/api/bmw', (req, res) => {
const newRecord = new eModel(req.body);
newRecord.save((error, record) => {
res.status(201).send(record);
});
});
然后我尝试向这个 api 添加测试。我将 mocha 与 chai-http 一起使用。看下面的代码
let chai = require('chai');
const chaiHttp = require('chai-http');
chai.use(chaiHttp);
it('POST /api/bmw', () => {
chai
.request(app)
.post('/api/bmw')
.send({ model: '440i', year: 2018, price: 85000 })
.end((error, res) => {
console.log('POST', res.body);
});
});
Step1:删除数据库(没有数据库,没有收集)
Step2:我使用 mocha path-to-test-file --timeout 20000 运行测试
Step3:重复步骤2
在第 2 步之后,我没有看到任何记录的数据(console.log('POST', res.body))。但是,已创建集合并将数据保存到 mongo 数据库。
在第 3 步之后,我确实看到了记录的数据。我假设是因为集合已经存在于第 2 步的 mongo 中。
然后我更进一步。我从第 1 步重复到第 3 步。但是这次我在模型保存回调中输入了一个日志,然后我意识到在step2之后也没有调用回调。但是如果我使用邮递员而不是 chai-http,它每次都有效。
有没有人有同样的问题?这是猫鼬模型和 chai-http 之间的能力问题吗?我错过了设置还是什么?
就个人而言,我认为无论 mongo 中是否存在该集合,它都应该有效。