[解決済み] 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 ドキュメント .
関連
-
[解決済み】JavaScriptで「無効な日付」のDateインスタンスを検出する
-
[解決済み] voidの非同期メソッドを待機させる
-
[解決済み] HTMLマークアップのどこに<script>タグを記述すればよいですか?
-
[解決済み] モバイルブラウザの検出
-
[解決済み] setTimeout()コールバックにパラメータを渡すにはどうすればよいですか?
-
[解決済み] 非同期アロー関数のシンタックス
-
[解決済み】関数の前のエクスクラメーションマークは何をするのですか?
-
[解決済み】非同期のforEachコールバックがすべて完了した後にコールバックする。
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] $.ajax実行中にローディングイメージを表示する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] なぜJavaScriptでは!{}[true]がtrueに評価されるのですか?
-
[解決済み] node.jsで文字列のsha1ハッシュを取得するにはどうすればよいですか?
-
[解決済み] JavaScriptで文字列を数値に変換する最速の方法は何ですか?
-
[解決済み] Javascript / jQueryでAndroid端末を検出する。
-
[解決済み] コールバック地獄とは何か、RXはそれをどのように、そしてなぜ解決するのか?
-
[解決済み] JavaScriptでjson-objectのキーを取得する [重複].
-
[解決済み] CORS: 認証モードは 'include' です。
-
[解決済み] Prototypeを使ってtextareaを自動サイズ調整するには?
-
[解決済み] JavaScriptデータフォーマット/プリティプリンタ
-
[解決済み] JavaScriptでDIVを表示・非表示にするには?