libresilient/__tests__/service-worker.test.js

64 wiersze
2.1 KiB
JavaScript

const makeServiceWorkerEnv = require('service-worker-mock');
//global.fetch = require('service-worker-mock/fetch');
global.fetch = require('node-fetch');
jest.mock('node-fetch')
global.fetch.mockImplementation((url, init) => {
const response = new Response(
new Blob(
[JSON.stringify({ test: "success" })],
{type: "application/json"}
),
{
status: 200,
statusText: "OK",
headers: {
'ETag': 'TestingETagHeader'
},
url: url
});
return Promise.resolve(response);
});
describe("service-worker", () => {
beforeEach(() => {
Object.assign(global, makeServiceWorkerEnv());
global.self = new ServiceWorkerGlobalScope()
jest.resetModules();
self.LibResilientPlugins = new Array()
self.LibResilientConfig = {
plugins: {
'fetch': {},
'cache':{}
},
loggedComponents: [
'service-worker', 'cache', 'fetch'
]
}
})
test("fetching content should work", async () => {
require("../plugins/fetch.js");
require("../plugins/cache.js");
require("../service-worker.js");
await self.trigger('install')
await self.trigger('activate')
var response = await self.trigger('fetch', new Request('/test.json'))
expect(await response.json()).toEqual({ test: "success" })
expect (await caches.open('v1').then((cache)=>{
return cache.keys()
}).then((keys)=>{
return keys[0].url
})).toEqual(self.location.origin + '/test.json')
expect (await caches.open('v1').then((cache)=>{
return cache.match(self.location.origin + '/test.json')
}).then((response)=>{
return response.json()
}).then((json)=>{
return json
})).toEqual({ test: "success" })
});
});