Mocha节点测试,返回的结果传递为Null而不是查询值?

时间:2018-11-05 20:48:20

标签: node.js mongoose mocha chai

所以我试图在这里进行Mocha测试,但是我的返回值(紧接.then之前)为Null。

当我控制台记录Store.findById(resStore.id)时,我会在日志中获取该值,但是当我将其返回并传递给它时,它显示Null?

       it('should return posts with right fields', function() {
  let resStore;
  return chai.request(app)
    .get('/stores')
    .then(function(res) {
      expect(res).to.have.status(200);
      expect(res).to.be.json;
      expect(res.body).to.be.a('array');
      expect(res.body).to.have.lengthOf.at.least(1);
      res.body.forEach(function(store) {
        expect(store).to.be.a('object');
        expect(store).to.include.keys('_id', 'name', 'storeLogo');
      });
      resStore = res.body[0];
      console.log(Store.findById(resStore.id)); // Response is QUERY Result
      return Store.findById(resStore.id);
    })
    .then(doc => {
      console.log(`Casey ${doc}`); //Response is Casey Null
      resStore.name.should.equal(doc.name);
      resStore.name.should.equal(doc.storeLogo);
    });
  });
});

1 个答案:

答案 0 :(得分:1)

Store.findById(resStore.id)返回代表查询的Mongoose Query object。这样便可以在该对象上运行console.log(该对象的内部表示)。

当您将其返回到Promise链中的 时(您要做的是),该Query对象被视为Promise(它不是纯粹的Promise,但包含只是将适当数量的信息视为一个信息),并将等待其解决(直到它解决或被拒绝)。这样的结果将是查询的实际结果,也就是传递到最后一个.then块(作为doc)的内容。

此处介绍了Promise链的工作方式:https://javascript.info/promise-chaining#returning-promises