2

フレームワークFoobarを構築していると仮定し、Foobarに関数.coolstuff()があると仮定します。この関数は、.coolstuff2()と.coolstuff3()を呼び出すIndexedDB呼び出しを行い、これらの両方が完了すると、トランザクションは.coolstuff4()を呼び出します。

上記を自由に組み合わせて、心ゆくまでお楽しみください。さまざまなアイテムを適切に処理するためのforループや、さまざまな非同期レイヤーを使用します。

次に、Foobarをテストするための単体テストを作成します。まず、いくつかのパラメーターをFoobarに渡すテストを作成し、いくつかのクールなものを開始します。さまざまな段階で、sinon.js(または他のフレームワーク)を使用してフックをいくつかの特定のcoolstuff関数にアタッチし、IndexedDBでアイテムカウントを実行したり、DOMなどをチェックしたりできます。さまざまな時間をカウントすることは困難ですが、これを実行します。 .coolstuffX()は、必要なチェックを行うために適切な段階でインターセプトするために呼び出されました。

あなたは満足しています。テストは希望する結果で終了します。次に、unittest2を実行します。

ただし、.coolstuffXYZ()は、unittest1に必要なものを非同期的に呼び出すことを終了していません。これはunittest2に干渉します。

テスト後にタイマーに依存すること(厄介)...またはユニットテストのためにFoobarのすべての関数をインターセプトして、テストが終了したと言ったときに実際に終了するようにする(厄介で、保証はありません)。

問題のテストのデータベース接続を閉じて、すべてのIndexedDBトランザクションが終了するのを待ってから次のテストを開始する方法はありますか?[ないのではないかと思うので修辞的]

または、異なるjavascriptコンテキストで各テストを実行する方法を見つける必要がありますか?どちらにしても厄介/トリッキーなようです。うそつき。

4

1 に答える 1

3

indexeddbの上にライブラリを構築しています。このフレームワークのコア機能は、主に単体テストでカバーされています。私がどのように行ったかを確認したい場合は、 http: //users.telenet.be/kristofdegrave/test/にアクセスしてください。テストライブラリとしてQUnitを使用しました。

私がすることは、最初のテストが終了したときに次のテストを開始することです。テストごとに、前の状況をクリーンアップし、新しいデータベースの状況から始めます。これを行うには、テストを実行する前にデータベースを削除し、テストの初期状態で新しいデータベースを作成します。このようにして、テストは独立して実行でき、相互に影響を与えることはありません。

于 2012-10-17T06:56:55.670 に答える