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



所以我试图在这里做一个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);
});
});
});

Store.findById(resStore.id)返回一个MongooseQuery对象,该对象表示一个查询。因此,当您在它(该对象的内部表示(上运行console.log时,就会看到这种情况。

当你在Promise链中返回它时,Query对象被视为Promise(它不是一个纯粹的Promise,但它包含的信息量刚好可以作为一个Promise处理(,并将被等待,直到它解决(直到它解决或被拒绝(。其结果将是查询的实际结果,这就是传递给最后一个.then块(作为doc(的结果。

Promise链的工作方式记录如下:https://javascript.info/promise-chaining#returning-承诺

最新更新