3

ロードされたファイルに対してソースコード変換を実行するService Workerを作成したいと考えています。この機能をテストするために、Karma を使用します。

私たちのテストでは、ソース コード変換が実行されるソース ファイルをインポートします。テストは、Service Worker が変換を実行した場合にのみ成功し、Service Worker がアクティブでない場合に失敗します。

ローカルで Karma を開始しsingleRun: false、変更されたファイルを監視してテストを再開できます。ただし、Service Worker は、最初に読み込まれたページではアクティブではありません。したがって、すべてのテスト ケースは成功しますが、最初のケースは成功します。

ただし、継続的インテグレーションには、シングルラン モードが必要です。そのため、テストの実行中に Service Worker はアクティブではなく、それに応じて失敗します。また、2 回連続して実行しても、この問題は解決しません。Karma は使用中のブラウザーを再起動するためです (そのため、Service Worker が失われます)。

問題は、テスト実行で Service Worker を利用できるようにする方法です。たとえば、カルマが使用するブラウザー インスタンスを保持することによって。

4

1 に答える 1

4

self.clients.claim()Service Worker のハンドラー内で呼び出しactivateを行うと、Service Worker が最初に登録された最初のページの読み込みを Service Worker に制御してもらいたいというシグナルがブラウザーに送られます。Service Worker サンプル: 即時制御で、この例を実際に見ることができます。

navigator.serviceWorker.ready制御されたページの JavaScript では、 promise が解決されるまで待ってからテスト コードを実行することをお勧めします。その約束が解決されると、アクティブな Service Worker がページを制御していることがわかります。Polymer 要素テストでは、<platinum-sw-register>この手法を使用します。

于 2015-08-06T19:55:48.443 に答える