test: fix service worker test (#988)

Do the following to ensure SW is active and serves requests:
- in ServiceWorker, claim all clients once activated
- in page, await activation promise instead of a registration
This commit is contained in:
Andrey Lushnikov 2020-02-13 13:21:19 -08:00 committed by GitHub
parent 2e0d89e25c
commit 05f8d001f8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 6 additions and 2 deletions

View File

@ -1,5 +1,6 @@
<script>
window.registrationPromise = navigator.serviceWorker.register('sw.js');
window.activationPromise = new Promise(resolve => navigator.serviceWorker.oncontrollerchange = resolve);
async function fetchDummy(name) {
const response = await fetch(name);

View File

@ -9,3 +9,7 @@ self.addEventListener('fetch', event => {
const response = new Response(blob, { "status" : 200 , "statusText" : "OK" });
event.respondWith(response);
});
self.addEventListener('activate', event => {
event.waitUntil(clients.claim());
});

View File

@ -570,8 +570,7 @@ module.exports.describe = function({testRunner, expect, defaultBrowserOptions, p
describe('service worker', function() {
it('should intercept after a service worker', async({browser, page, server, context}) => {
await page.goto(server.PREFIX + '/serviceworkers/fetchdummy/sw.html');
await page.evaluate(() => window.registrationPromise);
await page.reload();
await page.evaluate(() => window.activationPromise);
// Sanity check.
const swResponse = await page.evaluate(() => fetchDummy('foo'));