我们想编写一个Service Worker来对加载的文件执行源代码转换。为了测试此功能,我们使用了Karma。
我们的测试导入源文件,在源文件上执行源代码转换。仅当Service Worker执行转换时测试才成功,而当Service Worker未处于活动状态时,测试失败。
在本地,我们可以使用singleRun: false
启动Karma并监视已更改的文件以重新启动测试。但是,Service Workers对最初加载它们的页面不起作用。因此,每个测试用例都会成功,但第一个测试用例。
但是,对于持续集成,我们需要单次运行模式。因此,我们的服务工作者在测试运行期间不活动,因此失败。 此外,连续两次运行无法解决此问题,因为Karma重新启动使用过的浏览器(因此我们失去了服务工作者)。
那么,问题是,如何在测试运行中使服务工作者可用? 例如,通过保留业力使用的浏览器实例。
答案 0 :(得分:4)
在服务工作者的self.clients.claim()
处理程序中调用activate
向浏览器发出信号,表明您希望服务工作者控制服务工作者首次注册的初始页面加载。您可以在Service Worker Sample: Immediate Control中看到此示例。
我建议您在受控页面的JavaScript中等待navigator.serviceWorker.ready
承诺在运行测试代码之前解析。一旦该承诺解决了,您就会知道有一个活跃的服务工作者控制您的页面。 test for the <platinum-sw-register>
Polymer element使用此技术。