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

Node.js Mocha节点测试,返回传递为Null的结果,而不是查询值?,node.js,mongoose,mocha.js,chai,Node.js,Mongoose,Mocha.js,Chai,所以我尝试在这里做一个Mocha测试,但是我的返回值(就在.then之前)是空的 当我控制台记录Store.findById(resStore.id)时,我会在日志中获取该值,但当我返回该值并将其传递给时,它会显示Null it('should return posts with right fields', function() { let resStore; return chai.request(app) .get('/stores') .then(f

所以我尝试在这里做一个Mocha测试,但是我的返回值(就在.then之前)是空的

当我控制台记录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);
    });
  });
});
Store.findById(resStore.id)
返回表示查询的。这就是您在其上运行
console.log
时看到的内容(该对象的内部表示)

当您在承诺链中返回它时(这就是您所做的),该
Query
对象被视为一个承诺(它不是一个纯粹的承诺,但它包含的信息量正好可以被视为一个承诺),并将等待它解决(直到它解决或被拒绝)。其结果将是查询的实际结果,这是传递给最后一个
的结果。然后
块(如
doc


这里记录了承诺链的工作原理:

我希望
Store.findById
返回承诺,而不是查询结果。如果返回后者,则表明该方法是同步的。我不认为query是正确的词,但它返回的是结果,而不是null。ie:Query{{u mongooseOptions:{},{u transforms:[],mongooseCollection:NativeCollection{collection:collection{s:[Object]},选项:{bufferCommands:true,capped:false,$wasForceClosed:undefined},name:'stores',collectionName:'stores',conn:NativeConnection{……这是一个Mongoose查询对象。它不代表查询结果,只是一个查询。您尝试运行的查询显然不会产生任何结果。我想,我不明白如何将它记录在它上面的行上,但当我返回它时,它是空的?