在Karma测试中加载和使用服务工作者

时间:2015-08-06 14:30:29

标签: karma-runner travis-ci service-worker

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

我们的测试导入源文件,在源文件上执行源代码转换。仅当Service Worker执行转换时测试才成功,而当Service Worker未处于活动状态时,测试失败。

在本地,我们可以使用singleRun: false启动Karma并监视已更改的文件以重新启动测试。但是,Service Workers对最初加载它们的页面不起作用。因此,每个测试用例都会成功,但第一个测试用例。

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

那么,问题是,如何在测试运行中使服务工作者可用? 例如,通过保留业力使用的浏览器实例。

1 个答案:

答案 0 :(得分:4)

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

我建议您在受控页面的JavaScript中等待navigator.serviceWorker.ready承诺在运行测试代码之前解析。一旦该承诺解决了,您就会知道有一个活跃的服务工作者控制您的页面。 test for the <platinum-sw-register> Polymer element使用此技术。