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')
|
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 () => {
|
test("making an external request should work and not go through the plugins", async () => {
|
||||||
global.fetch.mockImplementation((request, init) => {
|
global.fetch.mockImplementation((request, init) => {
|
||||||
return Promise.resolve(
|
return Promise.resolve(
|
||||||
|
@ -440,7 +525,7 @@ describe("service-worker", () => {
|
||||||
}
|
}
|
||||||
self.LibResilientPlugins.push({
|
self.LibResilientPlugins.push({
|
||||||
name: 'resolve-all',
|
name: 'resolve-all',
|
||||||
description: 'Reject all requests.',
|
description: 'Resolve all requests.',
|
||||||
version: '0.0.1',
|
version: '0.0.1',
|
||||||
fetch: (request, init)=>{
|
fetch: (request, init)=>{
|
||||||
return Promise.resolve(
|
return Promise.resolve(
|
||||||
|
|
Ładowanie…
Reference in New Issue