我正在编写一个数据库测试(由Mocha运行),在保存文档后调用findOne并发现了一个奇怪的行为:
伪代码在这里: ...
test1
A.save(check('A',done));
test2
B.save(check('B',done));
test3
C.save(check('C',done));
...
check = function(name, done) {
theModel.findOne({name:name}, function(err,result) {
assert.notEqual(result,null);
result.remove(done);
});
}
然后,A测试通过,但B测试没有通过。我检查日志,我发现了一件奇怪的事情: 首先,它在执行查询后执行插入后删除(对于第一个测试,确定是预期的行为)。 在第一次测试之后,当我看到在插入之前执行查询时,我感到震惊(因此测试失败并且没有删除任何内容)。 第三种等等表现方式相同!在插入之前执行查询:(
所以唯一通过的测试是第一个(如果我用B改变A,那么B被传递而A不是)。如果我查看mongodb集合,我可以看到在查询之后执行的其他插入(并且由于断言失败,它们没有被删除)
我正在使用mongoose 2.7.2,(但我使用的是以前的版本,只是更新以查看它是否是一个已解决的错误)。帮助:(
答案 0 :(得分:0)
我错了......
没有注意到我在调用save之前实际上正在调用check(因为我在save方法中调用了函数...我是如此愚蠢而且是javascript的新手。)
好的,我应该以其他方式执行检查:
A.save(function(err, result) { check('A', done);})
我道歉!