kopia lustrzana https://gitlab.com/rysiekpl/libresilient
service-worker: testing if a failed fetch in first plugin does not stop a second configured plugin from working (ref. #8)
rodzic
7bd024f2c7
commit
8148c76eb2
|
@ -109,6 +109,91 @@ describe("service-worker", () => {
|
|||
expect(response.headers.get('X-LibResilient-ETag')).toEqual('TestingETagHeader')
|
||||
});
|
||||
|
||||
test("failed fetch by first configured plugin should not affect a successful fetch by a second one", async () => {
|
||||
self.LibResilientConfig = {
|
||||
plugins: {
|
||||
'reject-all': {},
|
||||
'resolve-all': {}
|
||||
},
|
||||
loggedComponents: [
|
||||
'service-worker'
|
||||
]
|
||||
}
|
||||
let rejectingFetch = jest.fn((request, init)=>{ return Promise.reject(request); })
|
||||
let resolvingFetch = jest.fn((request, init)=>{
|
||||
return Promise.resolve(
|
||||
new Response(
|
||||
new Blob(
|
||||
[JSON.stringify({ test: "success" })],
|
||||
{type: "application/json"}
|
||||
),
|
||||
{
|
||||
status: 200,
|
||||
statusText: "OK",
|
||||
headers: {
|
||||
'ETag': 'TestingETagHeader'
|
||||
},
|
||||
url: self.location.origin + '/test.json'
|
||||
})
|
||||
)
|
||||
})
|
||||
self.LibResilientPlugins.push({
|
||||
name: 'reject-all',
|
||||
description: 'Reject all requests.',
|
||||
version: '0.0.1',
|
||||
fetch: rejectingFetch
|
||||
})
|
||||
self.LibResilientPlugins.push({
|
||||
name: 'resolve-all',
|
||||
description: 'Resolve all requests.',
|
||||
version: '0.0.1',
|
||||
fetch: resolvingFetch
|
||||
})
|
||||
|
||||
require("../service-worker.js");
|
||||
|
||||
var response = await self.trigger('fetch', new Request('/test.json'))
|
||||
expect(rejectingFetch).toHaveBeenCalled();
|
||||
expect(resolvingFetch).toHaveBeenCalled();
|
||||
expect(await response.json()).toEqual({ test: "success" })
|
||||
});
|
||||
|
||||
test("defaultPluginTimeout should be respected", async () => {
|
||||
jest.useFakeTimers()
|
||||
self.LibResilientConfig = {
|
||||
defaultPluginTimeout: 1000,
|
||||
plugins: {
|
||||
'resolve-with-timeout': {}
|
||||
},
|
||||
loggedComponents: [
|
||||
'service-worker',
|
||||
]
|
||||
}
|
||||
let rwtCallback = jest.fn()
|
||||
self.LibResilientPlugins.push({
|
||||
name: 'resolve-with-timeout',
|
||||
description: 'Resolve all requests after a timeout.',
|
||||
version: '0.0.1',
|
||||
fetch: (request, init)=>{
|
||||
return new Promise((resolve, reject)=>{
|
||||
setTimeout(rwtCallback, 5000)
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
require("../service-worker.js");
|
||||
|
||||
var response = self.trigger('fetch', new Request('/test.json'))
|
||||
jest.advanceTimersByTime(1000);
|
||||
expect.assertions(2)
|
||||
try {
|
||||
await response
|
||||
} catch(e) {
|
||||
expect(e.toString()).toBe("Error: LibResilient request using resolve-with-timeout timed out after 1000ms.")
|
||||
}
|
||||
expect(rwtCallback).not.toHaveBeenCalled()
|
||||
});
|
||||
|
||||
test("making an external request should work and not go through the plugins", async () => {
|
||||
global.fetch.mockImplementation((request, init) => {
|
||||
return Promise.resolve(
|
||||
|
@ -440,7 +525,7 @@ describe("service-worker", () => {
|
|||
}
|
||||
self.LibResilientPlugins.push({
|
||||
name: 'resolve-all',
|
||||
description: 'Reject all requests.',
|
||||
description: 'Resolve all requests.',
|
||||
version: '0.0.1',
|
||||
fetch: (request, init)=>{
|
||||
return Promise.resolve(
|
||||
|
|
Ładowanie…
Reference in New Issue