首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mongoose model save在mongo中不存在集合时,不会触发回调并传递给chai-http

mongoose model save在mongo中不存在集合时,不会触发回调并传递给chai-http
EN

Stack Overflow用户
提问于 2017-03-21 07:07:40
回答 1查看 145关注 0票数 0

我创建了post api,并使用mongoose模型将请求数据保存到数据库中。然后我使用postman来测试这个api。一切正常。我指的是创建集合,将数据保存到集合,并从响应中获取数据。请参阅以下代码

代码语言:javascript
复制
    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);
      });
    });

然后我尝试将test添加到此api中。我使用mocha和chai-http。请参阅以下代码

代码语言:javascript
复制
    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: Drop database (无db,无集合)

Step2:我使用mocha path-to- test -file运行测试--超时20000

Step3:重复step2

在步骤2之后,我看不到任何记录的数据(console.log(‘POST’,res.body))。但是,集合已经创建,数据已经保存到mongo数据库。

在step3之后,我确实看到了记录的数据。我假设是因为这个集合已经存在于基于step2的mongo中。

然后我再往前走一步。我重复一下从step1到step3。但这次我在模型保存回调中添加了一个日志,然后我意识到在step2之后也不会调用该回调。但是如果我使用postman而不是chai-http,它每次都可以工作。

有没有人有同样的问题?这是mongoose模型和chai-http之间的能力问题吗?我是不是错过了设置或其他什么?

就我个人而言,我认为无论集合是否存在于mongo中,它都应该可以工作。

EN

回答 1

Stack Overflow用户

发布于 2017-03-21 21:33:10

该api发送器是异步请求。您需要将done函数传递到您的it()块中,以标记completion...like如下:

代码语言:javascript
复制
let chai = require('chai');
const chaiHttp = require('chai-http');
chai.use(chaiHttp);

it('POST /api/bmw', (done) => {
  chai
  .request(app)
  .post('/api/bmw')
  .send({ model: '440i', year: 2018, price: 85000 })
  .end((error, res) => {
    if(error) done(error)
    else{
      console.log('POST', res.body);
      done();
    }
  });
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42915602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档