@@ -2,130 +2,63 @@ import { JSDOM } from "jsdom"
22// Note: we need to import logger from the root
33// because this is the logger used in logError in ../src/common/util
44import { logger } from "../node_modules/@coder/logger"
5- import { registerServiceWorker , handleServiceWorkerRegistration } from "../src/browser/register"
6- import { Options } from "../src/common/util"
7- const { window } = new JSDOM ( )
8- global . window = ( window as unknown ) as Window & typeof globalThis
9- global . document = window . document
10- global . navigator = window . navigator
115
126describe ( "register" , ( ) => {
13- describe ( "registerServiceWorker" , ( ) => {
14- let spy : jest . SpyInstance
15- let loggerSpy : jest . SpyInstance
16-
17- beforeAll ( ( ) => {
18- Object . defineProperty ( global . navigator , "serviceWorker" , {
19- value : {
20- register : ( ) => {
21- return "hello"
22- } ,
7+ const { window } = new JSDOM ( )
8+ global . window = ( window as unknown ) as Window & typeof globalThis
9+ global . document = window . document
10+ global . navigator = window . navigator
11+ global . location = window . location
12+
13+ let spy : jest . SpyInstance
14+ let loggerSpy : jest . SpyInstance
15+
16+ beforeAll ( ( ) => {
17+ Object . defineProperty ( global . navigator , "serviceWorker" , {
18+ value : {
19+ register : ( ) => {
20+ return "hello"
2321 } ,
24- } )
25- } )
26-
27- beforeEach ( ( ) => {
28- loggerSpy = jest . spyOn ( logger , "error" )
29- spy = jest . spyOn ( global . navigator . serviceWorker , "register" )
30- } )
31-
32- afterEach ( ( ) => {
33- jest . resetAllMocks ( )
34- } )
35-
36- afterAll ( ( ) => {
37- jest . restoreAllMocks ( )
38- } )
39-
40- it ( "should register a ServiceWorker" , ( ) => {
41- const path = "/hello"
42- const mockOptions = {
43- base : "" ,
44- csStaticBase : "" ,
45- logLevel : 0 ,
46- }
47- registerServiceWorker ( navigator , path , mockOptions )
48- // expect spy to have been called
49- expect ( spy ) . toHaveBeenCalled ( )
50- expect ( spy ) . toHaveBeenCalledTimes ( 1 )
51- } )
52-
53- it ( "should log an error if something doesn't work" , ( ) => {
54- const message = "Can't find browser"
55- const error = new Error ( message )
56- const path = "/hello"
57- const mockOptions = {
58- base : "" ,
59- csStaticBase : "" ,
60- logLevel : 0 ,
61- }
62- global . navigator . serviceWorker . register = ( ) => {
63- throw error
64- }
65-
66- registerServiceWorker ( navigator , path , mockOptions )
67- expect ( loggerSpy ) . toHaveBeenCalled ( )
68- expect ( loggerSpy ) . toHaveBeenCalledTimes ( 1 )
69- // Because we use logError, it will log the prefix along with the error message
70- expect ( loggerSpy ) . toHaveBeenCalledWith ( `[Service Worker] registration: ${ error . message } ${ error . stack } ` )
22+ } ,
7123 } )
24+ } )
7225
73- it ( "should work when base is undefined" , ( ) => {
74- const path = "/hello"
75-
76- // We want to test some code that checks if options.base is undefined
77- // so we leave it off mockOptions
78- // but assert it as Options so TS is happy
79- const mockOptions = {
80- csStaticBase : "" ,
81- logLevel : 0 ,
82- } as Options
83- registerServiceWorker ( navigator , path , mockOptions )
84- // expect spy to have been called
85- expect ( spy ) . toHaveBeenCalled ( )
86- expect ( spy ) . toHaveBeenCalledTimes ( 1 )
87- } )
26+ beforeEach ( ( ) => {
27+ spy = jest . spyOn ( global . navigator . serviceWorker , "register" )
28+ loggerSpy = jest . spyOn ( logger , "error" )
8829 } )
8930
90- describe ( "handleServiceWorkerRegistration" , ( ) => {
91- let getOptionsMock : jest . MockedFunction < ( ) => {
92- base : string
93- csStaticBase : string
94- logLevel : number
95- } >
96- let normalizeMock : jest . MockedFunction < ( v : string ) => string >
97- let registerServiceWorkerMock : jest . MockedFunction < (
98- navigator : Navigator ,
99- path : string ,
100- mockOptions : Options ,
101- ) => Promise < void > >
31+ afterEach ( ( ) => {
32+ jest . resetModules ( )
33+ jest . resetAllMocks ( )
34+ } )
10235
103- beforeEach ( ( ) => {
104- getOptionsMock = jest . fn ( ( ) => ( {
105- base : "" ,
106- csStaticBase : "" ,
107- logLevel : 0 ,
108- } ) )
36+ afterAll ( ( ) => {
37+ jest . restoreAllMocks ( )
38+ } )
10939
110- normalizeMock = jest . fn ( ( url : string ) => "qux///" )
40+ it ( "should register a ServiceWorker" , ( ) => {
41+ // Load service worker like you would in the browser
42+ require ( "../src/browser/register" )
43+ // Load service worker like you would in the browser
44+ // expect spy to have been called
45+ expect ( spy ) . toHaveBeenCalled ( )
46+ expect ( spy ) . toHaveBeenCalledTimes ( 1 )
47+ } )
11148
112- registerServiceWorkerMock = jest
113- . fn ( )
114- . mockImplementation ( ( navigator : Navigator , path : string , mockOptions : Options ) => Promise . resolve ( ) )
115- } )
116- it ( "should work when called" , ( ) => {
117- handleServiceWorkerRegistration ( {
118- getOptions : getOptionsMock ,
119- normalize : normalizeMock ,
120- registerServiceWorker : registerServiceWorkerMock ,
121- } )
49+ it ( "should log an error if something doesn't work" , ( ) => {
50+ const message = "Can't find browser"
51+ const error = new Error ( message )
52+ global . navigator . serviceWorker . register = ( ) => {
53+ throw error
54+ }
12255
123- const mocks = [ getOptionsMock , normalizeMock , registerServiceWorkerMock ]
56+ // Load service worker like you would in the browser
57+ require ( "../src/browser/register" )
12458
125- mocks . forEach ( ( mock ) => {
126- expect ( mock ) . toHaveBeenCalled ( )
127- expect ( mock ) . toHaveBeenCalledTimes ( 1 )
128- } )
129- } )
59+ expect ( loggerSpy ) . toHaveBeenCalled ( )
60+ expect ( loggerSpy ) . toHaveBeenCalledTimes ( 1 )
61+ // Because we use logError, it will log the prefix along with the error message
62+ expect ( loggerSpy ) . toHaveBeenCalledWith ( `[Service Worker] registration: ${ error . message } ${ error . stack } ` )
13063 } )
13164} )
0 commit comments