2017-10-04 2 views
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

答えて

0

マングースあなたがdoneコールバックを使用するか、約束を返すことができます。

+0

ポストセーブフックで実行するコードをアサートする必要があります。フックが非同期であるので、私は 'then()'でそれを行うことはできません – sidgate

+0

あなたの質問にはあなたは悲しいです:_詳細が第2のコレクションに保存されているかどうかを確認したいです。すべての_hooks_が終了したとき(同期と非同期)に 'user.save()'が実行されます。つまり、 'then'コールバックを使用して、データが別のコレクションに挿入されていることを検証できます。 – alexmac

+0

フックが非同期に実行されるので、 'then'コールバックの後にhookが実行されることがあります。だから、私はそれを確認することはできません。 1つのオプションは、setTimeoutで確認することですが、それは正しいオプションではありません – sidgate

関連する問題