web-dev-qa-db-ja.com

ぶら下がっている約束をチェックする方法は? (Bluebird.js)

約束を解決するのを忘れて、チェーンの残りの部分を(永遠に)待たせてしまうという問題に遭遇しました。ありがたいことに、私の場合、わずか10分ほどで問題を突き止めることができましたが、孤立したプロミスチェーンをチェックする方法がわからない場合、これは非常に大きな苦痛であることがわかりました。

次のエラーのチェックをどのように自動化しますか?

function myAsyncFunction(){
return new Promise((resolve,reject)=>{
  //do stuff here, but forget to call resolve();
});
}
1
JasonS

ほとんどの人は定期的な単体テストでチェックを行います。 Promiseは、それが解決することをテストし、テスト対象のユニットに適切なタイムアウトを与えることなくテストすることはできません。

1
Karl Bielefeldt

非同期テストにはdone()コールバックが必要です。それを呼び出すのはテスト作成者の責任です。もちろん、デフォルトの妥当なタイムアウトを設定するのに役立ちますが、8コアの最新のワークステーションに基づく楽観的すぎる期待を超える可能性がある低速の継続的インテグレーションサーバーに注意してください:)

次に、チェーンでプロミスを返すのを忘れた場合、null値を取得します(テストで戻り値を確認する必要があります)。 doneを忘れると、タイムアウト例外が発生し、テストが失敗します。

例えばチェックしてください。ジャスミン。

0
pkopac