3

我们想编写一个对加载的文件执行源代码转换的Service Worker 。为了测试这个功能,我们使用 Karma。

我们的测试导入源文件,在这些文件上执行源代码转换。只有在 Service Worker 执行转换时测试才会成功,而在 Service Worker 不活动时测试会失败。

在本地,我们可以启动 KarmasingleRun: false并观察更改的文件以重新启动测试。但是,Service Worker 对于最初加载它们的页面是不活动的。因此,除了第一个测试用例之外,每个测试用例都会成功。

但是,对于持续集成,我们需要单运行模式。因此,我们的 Service Worker 在测试运行期间是不活动的,因此会失败。此外,连续两次运行并不能解决此问题,因为 Karma 会重新启动使用过的浏览器(因此我们失去了 Service Worker)。

那么,问题来了,如何让 Service Worker 在测试运行中可用?例如,通过保留 karma 使用的浏览器实例。

4

1 回答 1

4

self.clients.claim()在服务工作人员的处理程序中调用activate会向浏览器发出信号,表明您希望服务工作人员控制首次注册服务工作人员的初始页面加载。您可以在Service Worker Sample: Immediate Control中看到一个这样的例子。

我建议在受控页面的 JavaScript 中,等待navigator.serviceWorker.ready承诺解决,然后再运行测试代码。一旦该承诺得到解决,您就会知道有一个活跃的服务人员控制您的页面。聚合物元素测试<platinum-sw-register>使用这种技术。

于 2015-08-06T19:55:48.443 回答