2012-07-26 58 views
0

我在写一个数据库测试(由摩卡拼命地跑),调用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); 
    }); 
} 

然后,测试通过但B测试不合格。我检查日志,我发现一个奇怪的事情: 首先它执行插入,后查询,删除后(第一次测试,确定这是预期的行为)。 第一次测试后,我看到查询在插入之前执行(所以测试失败,没有任何东西被删除),我感到震惊。 第三等表现一样!查询在插入之前执行:(

因此,唯一通过的测试是第一个测试(如果我用B更改A,然后B通过,A不是)如果我查看mongodb集合,我可以看到另一个在查询后执行的插入(并且因为断言失败,它们被删除)

我正在使用猫鼬2.7.2,(但是我使用的是之前的版本,只是更新以查看它是否是一个已解决的错误) 。说明:(

回答

0

我错了......

没有注意到我调用save之前实际调用检查(因为我打电话的功能侧保存方法...即时通讯如此愚蠢,新的JavaScript)。

好了,所以我应该在其他的方式进行检查:

A.save(function(err, result) { check('A', done);}) 

我道歉!