cypress-io / cypress

Fast, easy and reliable testing for anything that runs in a browser.
https://cypress.io
MIT License
46.48k stars 3.15k forks source link

Service Workers does not work after a page reload #28396

Open fahmiradica opened 7 months ago

fahmiradica commented 7 months ago

Current behavior

Service Workers does not work after a page reload

Steps to reproduce:

  1. Visit page with service worker
  2. Reload page

The service worker is working before the reload, but after reloading it won't get any message posted from the page. No error is being shown in the console.

Desired behavior

Service workers should receive the postMessage even after the reload

Test code to reproduce

In page Javascript:

navigator.serviceWorker.register('path-to-service-worker.js', {scope: '/'});
navigator.serviceWorker.ready.then(function(registration) {
      registration.active.postMessage('Hello');
});

In service worker JS file:

addEventListener('message', function (evt) {
    console.log(evt); **//Did not receive any message after reload**
});

Cypress Version

13.6.0

Node version

20.9.0

Operating System

Windows 11

Debug Logs

cypress:lifecycle:ProjectConfigManager call event after:run for invocation id inv95 +20s
  cypress:network:connect got addresses { hostname: 'optimizationguide-pa.googleapis.com', port: 443, addresses: [ { address: '216.58.196.42', family: 4 }, { address: '142.250.199.10', family: 4 }, { address: '216.58.199.234', fam
ily: 4 }, { address: '216.58.200.10', family: 4 }, { address: '142.251.223.74', family: 4 }, { address: '216.58.196.10', family: 4 }, { address: '216.58.221.202', family: 4 }, { address: '172.217.174.170', family: 4 }, { address: '142.250.199.42', family: 4 }, { address: '172.217.25.202', family: 4 }, { address: '172.217.26.74', family: 4 }, { address: '142.251.222.234', family: 4 } ] } +2ms
  cypress:lifecycle:child:RunPlugins:27468 execute plugin event: after:run ({ invocationId: 'inv95', eventId: 4 }) +22s
  cypress:server:browsers:browser-cri-client Target.targetDestroyed { event: { targetId: '4FFA02B05E72F141AE75C83352499A2B' }, closing: false, closed: false, resettingBrowserTargets: false } +9ms
  cypress:server:util:socket_allowed allowed socket closed, removing { localPort: 50561 } +221ms
  cypress:network:agent got family { family: 4, href: 'https://optimizationguide-pa.googleapis.com/v1:GetModels' } +23ms
  cypress:server:browsers:browser-cri-client Target.targetDestroyed { event: { targetId: '65DE6221061CDB02EE4D6EE7A07EA3A8' }, closing: false, closed: false, resettingBrowserTargets: false } +28ms
  cypress:server:browsers:cri-client disconnected, starting retries to reconnect... { closed: false, target: 'ws://127.0.0.1:49979/devtools/browser/602a8326-b7d7-481f-b7de-4325ef9c0297' } +41ms
  cypress:server:browsers:cri-client disconnected, attempting to reconnect... { retryIndex: 1, closed: false, target: 'ws://127.0.0.1:49979/devtools/browser/602a8326-b7d7-481f-b7de-4325ef9c0297' } +0ms
  cypress:server:browsers:cri-client connecting { connected: false, target: 'ws://127.0.0.1:49979/devtools/browser/602a8326-b7d7-481f-b7de-4325ef9c0297' } +0ms
  cypress:server:browsers:cri-client could not reconnect, retrying... { closed: false, target: 'ws://127.0.0.1:49979/devtools/browser/602a8326-b7d7-481f-b7de-4325ef9c0297', err: Error: connect ECONNREFUSED 127.0.0.1:49979     at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1494:16) { errno: -4078, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 49979 } } +5ms
  cypress:server:request aborting { requestId: 'request94' } +271ms
  cypress:server:util:socket_allowed allowed socket closed, removing { localPort: 50697 } +40ms
  cypress:server:util:socket_allowed allowed socket closed, removing { localPort: 50612 } +3ms
  cypress:server:util:socket_allowed allowed socket closed, removing { localPort: 50563 } +5ms
  cypress:server:util:socket_allowed allowed socket closed, removing { localPort: 50622 } +4ms
  cypress:server:util:socket_allowed allowed socket closed, removing { localPort: 50509 } +0ms
  cypress:server:util:socket_allowed allowed socket closed, removing { localPort: 50374 } +0ms
  cypress:server:util:socket_allowed allowed socket closed, removing { localPort: 50592 } +0ms

Other

No response

ryanthemanuel commented 7 months ago

Hi @fahmiradica. Thanks for reporting this. I'm having trouble reproducing it with the code you've provided. I set up a simple project here: https://github.com/ryanthemanuel/cypress-service-worker-reload and when I run the test I see the messages show up properly on reload. Is there something I'm missing in the code in that project that you are doing in your scenario?