Mocha Node Test, возвращать результат, передаваемый как Null вместо значения запроса? - PullRequest
0 голосов
/ 05 ноября 2018

, поэтому я пытаюсь провести тест Мокко здесь, но мое возвращаемое значение (прямо перед .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 голосов
/ 06 ноября 2018

Store.findById(resStore.id) возвращает Mongoose Query объект , представляющий запрос. Вот что вы видите, когда запускаете console.log (внутреннее представление этого объекта).

Когда вы возвращаете его в цепочке Обещаний , что вы и делаете, этот Query объект рассматривается как Обещание (это не чистое Обещание, но оно содержит только правильное количество информации, которая будет рассматриваться как единое целое), и будет ожидать, пока она не установится (пока она не разрешится или не будет отклонена). Результатом этого будет фактический результат запроса, и это то, что передается последнему .then блоку (как doc).

Как работает сеть Promise, документировано здесь: https://javascript.info/promise-chaining#returning-promises

...