在Karma测试中加载和使用Service Worker

3
我们希望编写一个Service Worker,对加载的文件执行源代码转换。为了测试这个功能,我们使用Karma。
我们的测试导入源文件,对其执行源代码转换。只有当Service Worker执行转换时,测试才会成功;当Service Worker未激活时,测试失败。
在本地,我们可以使用singleRun: false启动Karma,并监视更改的文件以重新启动测试。然而,Service Workers对于最初加载它们的页面不起作用。因此,每个测试用例都成功,但第一个测试用例失败。
然而,对于持续集成,我们需要单次运行模式。因此,在测试运行期间,我们的Service Worker未激活,相应地导致测试失败。此外,连续两次运行也无法解决此问题,因为Karma会重新启动使用的浏览器(因此我们失去了Service Worker)。
所以,问题是如何使Service Worker在测试运行中可用?例如,通过保留Karma使用的浏览器实例。
1个回答

4
调用 self.clients.claim() 在你的服务工作者的 activate 处理函数中,向浏览器发出信号,表明你希望你的服务工作者在第一次注册时控制初始页面加载。你可以在Service Worker Sample: Immediate Control 中看到这个示例。
我建议,在受控制的页面的 JavaScript 中,在运行测试代码之前等待 navigator.serviceWorker.ready promise 解决。一旦该 promise 解决,你将知道存在一个活动的服务工作者控制你的页面。<platinum-sw-register> Polymer 元素”的测试就使用了这种技术。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接