{"_id":"@blossa/service-worker-mock","_rev":"1-7d2cdbd869708dd7498a64d229d53abf","name":"@blossa/service-worker-mock","dist-tags":{"latest":"2.1.0"},"versions":{"2.1.0":{"name":"@blossa/service-worker-mock","version":"2.1.0","main":"index.js","private":false,"repository":{"type":"git","url":"git+https://github.com/MichaelCereda/service-workers.git"},"keywords":["service-workers","service","workers","testing","mock"],"homepage":"https://github.com/MichaelCereda/service-workers/tree/master/packages/service-worker-mock","author":{"name":"Michael Cereda"},"license":"MIT","dependencies":{"dom-urls":"^1.1.0","shelving-mock-indexeddb":"^1.1.0","url-search-params":"^0.10.0","w3c-hr-time":"^1.0.1"},"description":"Service Worker Mock ========================= A mock service worker environment generator.","bugs":{"url":"https://github.com/MichaelCereda/service-workers/issues"},"_id":"@blossa/service-worker-mock@2.1.0","_nodeVersion":"14.8.0","_npmVersion":"6.14.10","dist":{"integrity":"sha512-OjmiPjk9AJoWfyprBes1ZfPGYFqwskgLkLUxu8hHdAJBjw7OfpROORqkA4fpbMZu5KDofoBIKERSGlW+UifDJg==","shasum":"0498405c32cac4e8037bfb56be0ef50b2abb1618","tarball":"https://registry.npmjs.org/@blossa/service-worker-mock/-/service-worker-mock-2.1.0.tgz","fileCount":37,"unpackedSize":38706,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf576tCRA9TVsSAnZWagAAkRgQAJmwHtBUO7CoF4d9qtvx\nUJjOYU2Dn/uykaM9Pld5BpkwAZvZPrPnbYFDUShUPpQvbOyf/lo6DdciXYpv\nyq32JujgSZqiPTWu+h84KsQfAXeUOjtLNY6I/kEOO03BWtUNkfLiqP+0r/LH\nFePwnyu6jGcizNqbw9kxFlERbp1sGhKjtweU7bINBfweSd5TA4l71+DiRsgq\nNR+y7glpZneeSerRj/errRYo9zVC1iuYkqDnBeXrE/HSNTbTuMNGfRbsUDpQ\ndaKgqVgVIibDQx4fu6rbmnRAKo3eZK+cj+WaszmsAbs9aflKFVPatU98PXH+\nX8wM8Pl69XSJEMXCt1wxhzjYmWrA8LOMkuSWLLtF/dU7w4TlwBq0ThwMXirP\nxDog4C7Az2LDaK1dcSTDR4v0X6PaV6NpaV8XbTmeC0iUeT59BMxdWn7NOM02\nEcC/A3SXoGG303Eo9qfdPCGgzXoiRkE2YwW7DHntTSHkp3+h825PNVKpZIWS\nlCIm7cMk9C2SHxd/eGCqS3WsurlgRS5k4TAuXZJLh90bl1ZlrWU/cXQ3K3XF\nANfCUWt8Q+K0+9LhTxu2BQdnjA9oVIHFRQ8e7t5+LbwYtqfhfr8DZoU/rktx\n877N5VHyDzR/fpDy4BgpZQoAhZ8iPzBSZLB13CW7OcFkCnMZS8atyvPSJc/U\nAl0O\r\n=zUMP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC/30X/b06T5RYLjtqy2Bjhm+RHswdqhumDTgBv71HM4wIhAP3JZSRNTgmuH9QFZdncqnBakFo7TbJ27ucvFayVIE/2"}]},"_npmUser":{"name":"mcrd","email":"michael@michaelcereda.com"},"directories":{},"maintainers":[{"name":"mcrd","email":"michael@michaelcereda.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/service-worker-mock_2.1.0_1609023148730_0.35388076320071904"},"_hasShrinkwrap":false}},"time":{"created":"2020-12-26T22:52:28.505Z","2.1.0":"2020-12-26T22:52:28.974Z","modified":"2022-04-04T19:41:22.292Z"},"maintainers":[{"name":"mcrd","email":"michael@michaelcereda.com"}],"description":"Service Worker Mock ========================= A mock service worker environment generator.","homepage":"https://github.com/MichaelCereda/service-workers/tree/master/packages/service-worker-mock","keywords":["service-workers","service","workers","testing","mock"],"repository":{"type":"git","url":"git+https://github.com/MichaelCereda/service-workers.git"},"author":{"name":"Michael Cereda"},"bugs":{"url":"https://github.com/MichaelCereda/service-workers/issues"},"license":"MIT","readme":"Service Worker Mock\n=========================\nA mock service worker environment generator.\n\n## Why?\nTesting service workers is difficult. Each file produces side-effects by calls to `self.addEventListener`, and the service worker environment is unlike a normal web or node context. This package makes it easy to turn a Node.js environment into a faux service worker environment. Additionally, it adds some helpful methods for testing integrations.\n\nThe service worker mock creates an environment with the following properties, based on the current [Mozilla Service Worker Docs](https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API).\n```js\nconst env = {\n  // Environment polyfills\n  skipWaiting: Function,\n  caches: CacheStorage,\n  clients: Clients,\n  registration: ServiceWorkerRegistration,\n  addEventListener: Function,\n  Request: constructor Function,\n  Response: constructor Function,\n  URL: constructor Function,\n\n  // Test helpers\n  listeners: Map,\n  trigger: Function,\n  snapshot: Function,\n};\n ```\n\n Test Helper   | description\n-------------- | -----------\n`listeners`    | [`Map`] A key/value map of active listeners (`install`/`activate`/`fetch`/etc).\n`trigger`      | [`Function`] Used to trigger active listeners (`await self.trigger('install')`).\n`snapshot`     | [`Function`] Used to generate a snapshot of the service worker internals (see below).\n\n Snapshot Property   | description\n-------------------- | -----------\n`caches`              | [`Object`] A key/value map of current cache contents.\n`clients`            | [`Array`] A list of active clients.\n`notifications`      | [`Array`] A list of active notifications\n\nAdditionally we provide a fetch mock in `service-worker-mock/fetch` to easily get up and running (see Getting Started for example).\n\n## Getting Started\nThe service worker mock is best used by applying its result to the global scope, then calling `require('../sw.js')` with the path to your service worker file. The file will use the global mocks for things like adding event listeners.\n```js\nconst makeServiceWorkerEnv = require('service-worker-mock');\nconst makeFetchMock = require('service-worker-mock/fetch');\n\ndescribe('Service worker', () => {\n  beforeEach(() => {\n    Object.assign(\n      global,\n      makeServiceWorkerEnv(),\n      makeFetchMock(),\n      // If you're using sinon ur similar you'd probably use below instead of makeFetchMock\n      // fetch: sinon.stub().returns(Promise.resolve())\n    );\n    jest.resetModules();\n  });\n  it('should add listeners', () => {\n    require('../sw.js');\n    expect(self.listeners.get('install')).toBeDefined();\n    expect(self.listeners.get('activate')).toBeDefined();\n    expect(self.listeners.get('fetch')).toBeDefined();\n  });\n});\n```\n\n## Use\nThe following is an example snippet derived from [__tests__/basic.js](https://github.com/pinterest/service-workers/blob/master/packages/service-worker-mock/__tests__/basic.js). The test is based on the [service worker example](https://github.com/GoogleChrome/samples/blob/gh-pages/service-worker/basic/service-worker.js) provided by Google. In it, we will verify that on `activate`, the service worker deletes old caches and creates the new one.\n\n```js\nconst makeServiceWorkerEnv = require('service-worker-mock');\n\ndescribe('Service worker', () => {\n  beforeEach(() => {\n    Object.assign(global, makeServiceWorkerEnv());\n    jest.resetModules();\n  });\n  \n  it('should delete old caches on activate', async () => {\n      require('../sw.js');\n\n      // Create old cache\n      await self.caches.open('OLD_CACHE');\n      expect(self.snapshot().caches.OLD_CACHE).toBeDefined();\n\n      // Activate and verify old cache is removed\n      await self.trigger('activate');\n      expect(self.snapshot().caches.OLD_CACHE).toBeUndefined();\n      expect(self.snapshot().caches['precache-v1']).toBeDefined();\n  });\n});\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}