0
私はポストフックのテストを書こうとしています。 user
が保存されると、追加の情報が別のコレクションに保存されます。詳細が2番目のコレクションに保存されているかどうかを確認したい。フックが非同期的に実行されるので、私はそれを確認できません。実行時にミドルウェアフックを削除するには?
userSchema.post('save', function(user, next){
var filter = new filterModel({name: user.name});
filter.save().then(()=>next());
});
私のテストでは、最初のフックの後に実行する新しいフックを追加することを考えていました。ここでは、最初のフックがfilter
オブジェクトを保存したかどうかを確認できます。
describe('',()=>{
it('', (done)=>{
userSchema.post('save', function(u){
filterModel.findOne({...}).exec().then(()=>{
assert(....);
done();
});
})
new userModel({name:'sid'}).save();
})
});
問題は、私はテストでpost
フックを追加したら、それはそれ以降のすべてのテストに適用されますです。 after
ブロックでこのフックを取り外すことはできますか?
it('should ...',() => {
let user = new User();
return user
.save()
.then(() => // TODO: do your assertion here);
});
ワンノート:モカでは、非同期のテストのために、そのテストモカを伝えるために、あなたが約束チェーンを作成し、then
コールバックで必要なアサーションを行うために必要な約束を、返しdocument#save
ポストセーブフックで実行するコードをアサートする必要があります。フックが非同期であるので、私は 'then()'でそれを行うことはできません – sidgate
あなたの質問にはあなたは悲しいです:_詳細が第2のコレクションに保存されているかどうかを確認したいです。すべての_hooks_が終了したとき(同期と非同期)に 'user.save()'が実行されます。つまり、 'then'コールバックを使用して、データが別のコレクションに挿入されていることを検証できます。 – alexmac
フックが非同期に実行されるので、 'then'コールバックの後にhookが実行されることがあります。だから、私はそれを確認することはできません。 1つのオプションは、setTimeoutで確認することですが、それは正しいオプションではありません – sidgate