0

我正在编写一个数据库测试(由 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 测试没有通过。我检查了日志,发现了一件奇怪的事情:首先它执行了插入,查询之后,删除之后(对于第一次测试,这就是预期的行为)。在第一次测试之后,当我看到在插入之前执行查询时我感到震惊(因此测试失败并且没有任何内容被删除)。第三个等等行为相同!在插入之前执行查询:(

因此,唯一通过的测试是第一个测试(如果我将 A 更改为 B,则 B 通过并且 A 不通过)。如果我查看 mongodb 集合,我可以看到在查询之后执行的其他插入(并且由于断言失败,它们没有被删除)

我正在使用 mongoose 2.7.2,(但我使用的是以前的版本,刚刚更新以查看它是否是已解决的错误)。帮助 :(

4

1 回答 1

0

我错了...

没有注意到我在调用 save 之前实际上是在调用 check (因为我在 save 方法中调用了函数......我很愚蠢并且对 javascript 很陌生)。

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

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

我道歉!

于 2012-07-26T11:27:28.323 回答