0

私はDBテスト(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テストは合格しません。ログを確認すると、奇妙なことがわかりました。最初に挿入を実行し、クエリを実行した後、削除を実行しました(最初のテストでは、期待される動作です)。最初のテストの後、挿入の前にクエリが実行されたのを見てショックを受けました(したがって、テストは失敗し、何も削除されませんでした)。3番目以降も同じように動作します。クエリは挿入前に実行されます:(

したがって、合格する唯一のテストは最初のテストです(AをBで変更すると、Bは合格し、Aは不合格になります)。mongodbコレクションを見ると、クエリの後に実行された他の挿入を見ることができます(そして、assertが失敗したため、それらは削除されませんでした)

私はマングース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 に答える