所以我试图在这里进行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);
});
});
});
答案 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