1. ホーム
  2. javascript

[解決済み] mochaのbefore()の非同期関数は、必ずit()の前に終了する仕様ですか?

2023-01-29 10:17:05

質問

コールバック関数を before() でデータベースをクリーニングするためのコールバック関数があります。 の中にあるものはすべて before() が始まる前に終了することが保証されていますか?

it()

どのように解決するのですか?

新しいmochaのバージョンについて:

mochaにプロミスを返すことができるようになり、mochaはそのプロミスが完了するのを待ってから処理を進めるようになりました。例えば、以下のテストはパスします。

before(function(){
   db.collection('user').remove({}, function(res){}); // is it guaranteed to finish before it()? 
});

it('test spec', function(done){
  // do the test
});

after(function(){
});

ドキュメントを見ることができます はこちら

古いバージョンのmochaの場合 :

非同期リクエストを他のすべてが起こる前に完了させたい場合、非同期リクエストのために let a = 0; before(() => { return new Promise((resolve) => { setTimeout(() => { a = 1; resolve(); }, 200); }); }); it('a should be set to 1', () => { assert(a === 1); }); パラメータを使用し、コールバックでそれを呼び出す必要があります。

Mocha はその後 done が呼び出されるまで待ち、次のブロックの処理を開始します。

done

しかし、ユニットテストのためにデータベースをスタブ化しないと、データベースのリクエストは単純なコードの実行に比べてかなり長いので、実行速度が強く低下する可能性があることに注意する必要があります。

より詳細な情報は Mocha ドキュメント .