无法调试mockgoose用于填充设置了字段的属性的问题。 Yads mockgoose http://github.com/yads/Mockgoose fork解决了使populate选项工作的错误,但如果指定了字段,则会为填充的属性返回null。我尝试查看源代码并逐步调试,但不知道在哪里查看。我可以在调试器中看到populate选项触发调用以获取子元素 - 我看到调用make返回正确的子结果和正确的字段,但是当父元素最终返回时它具有子元素的属性element设置为null。
查询:
Posts.findById(foo).populate('createdBy', {fname:1, lname:1});
使用post.createdBy = null错误地返回帖子。省略了fame的fields参数,lname,以某种方式使它再次使用post.createdBy返回完整的对象。
以下是代码的一些摘录 - 虽然我不确定这些是正确的观察地点。
collections.js
this.find = function (conditions, options, callback) {
var results;
var models = db[name];
if (!_.isEmpty(conditions)) {
results = utils.findModelQuery(models, conditions);
} else {
results = utils.objectToArray(utils.cloneItems(models));
}
results = filter.applyOptions(options, results);
if (results.name === 'MongoError') {
callback(results);
} else {
var result = {
toArray: function (callback) {
callback(null, results);
}
};
callback(null, result);
}
};
util.js中
function cloneItems(items) {
var clones = {};
for (var item in items) {
clones[item] = cloneItem(items[item]);
}
return clones;
}
function cloneItem(item) {
return _.cloneDeep(item, function(value) {
// Do not clone items that are ObjectId objects as _.clone mangles them
if (value instanceof ObjectId) {
return new ObjectId(value.toString());
}
});
}
这是关于这个问题的对话