フレームワークFoobarを構築していると仮定し、Foobarに関数.coolstuff()があると仮定します。この関数は、.coolstuff2()と.coolstuff3()を呼び出すIndexedDB呼び出しを行い、これらの両方が完了すると、トランザクションは.coolstuff4()を呼び出します。
上記を自由に組み合わせて、心ゆくまでお楽しみください。さまざまなアイテムを適切に処理するためのforループや、さまざまな非同期レイヤーを使用します。
次に、Foobarをテストするための単体テストを作成します。まず、いくつかのパラメーターをFoobarに渡すテストを作成し、いくつかのクールなものを開始します。さまざまな段階で、sinon.js(または他のフレームワーク)を使用してフックをいくつかの特定のcoolstuff関数にアタッチし、IndexedDBでアイテムカウントを実行したり、DOMなどをチェックしたりできます。さまざまな時間をカウントすることは困難ですが、これを実行します。 .coolstuffX()は、必要なチェックを行うために適切な段階でインターセプトするために呼び出されました。
あなたは満足しています。テストは希望する結果で終了します。次に、unittest2を実行します。
ただし、.coolstuffXYZ()は、unittest1に必要なものを非同期的に呼び出すことを終了していません。これはunittest2に干渉します。
テスト後にタイマーに依存すること(厄介)...またはユニットテストのためにFoobarのすべての関数をインターセプトして、テストが終了したと言ったときに実際に終了するようにする(厄介で、保証はありません)。
問題のテストのデータベース接続を閉じて、すべてのIndexedDBトランザクションが終了するのを待ってから次のテストを開始する方法はありますか?[ないのではないかと思うので修辞的]
または、異なるjavascriptコンテキストで各テストを実行する方法を見つける必要がありますか?どちらにしても厄介/トリッキーなようです。うそつき。