@@ -14,7 +14,7 @@ function uniqueDBName() {
1414 * Captures the internal IDBDatabase instance used by a store by intercepting
1515 * the first db.transaction() call.
1616 */
17- async function captureDB ( store : ReturnType < typeof createStore > ) : Promise < IDBDatabase > {
17+ async function captureDB ( store : ReturnType < typeof createStore > ) : Promise < IDBDatabase | undefined > {
1818 const captured : { db ?: IDBDatabase } = { } ;
1919 const original = IDBDatabase . prototype . transaction ;
2020 const spy = jest . spyOn ( IDBDatabase . prototype , 'transaction' ) . mockImplementation ( function ( this : IDBDatabase , ...args ) {
@@ -23,10 +23,10 @@ async function captureDB(store: ReturnType<typeof createStore>): Promise<IDBData
2323 return original . apply ( this , args ) ;
2424 } ) ;
2525 await store ( 'readonly' , ( s ) => IDB . promisifyRequest ( s . getAllKeys ( ) ) ) ;
26- return captured . db ! ;
26+ return captured . db ;
2727}
2828
29- describe ( 'createStore - connection resilience ' , ( ) => {
29+ describe ( 'createStore' , ( ) => {
3030 let logAlertSpy : jest . SpyInstance ;
3131 let logInfoSpy : jest . SpyInstance ;
3232
@@ -188,7 +188,8 @@ describe('createStore - connection resilience', () => {
188188 const store = createStore ( dbName , STORE_NAME ) ;
189189
190190 const db = await captureDB ( store ) ;
191- db . onclose ! . call ( db , new Event ( 'close' ) ) ;
191+ expect ( db ) . toBeDefined ( ) ;
192+ db ?. onclose ?. call ( db , new Event ( 'close' ) ) ;
192193
193194 const original = IDBDatabase . prototype . transaction ;
194195 let callCount = 0 ;
@@ -210,8 +211,9 @@ describe('createStore - connection resilience', () => {
210211 const store = createStore ( dbName , STORE_NAME ) ;
211212
212213 const db = await captureDB ( store ) ;
214+ expect ( db ) . toBeDefined ( ) ;
213215 // @ts -expect-error -- our handler ignores the event argument
214- db . onversionchange ! . call ( db , new Event ( 'versionchange' ) ) ;
216+ db ? .onversionchange ? .call ( db , new Event ( 'versionchange' ) ) ;
215217
216218 const original = IDBDatabase . prototype . transaction ;
217219 let callCount = 0 ;
@@ -233,7 +235,8 @@ describe('createStore - connection resilience', () => {
233235 const store = createStore ( dbName , STORE_NAME ) ;
234236
235237 const db = await captureDB ( store ) ;
236- db . onclose ! . call ( db , new Event ( 'close' ) ) ;
238+ expect ( db ) . toBeDefined ( ) ;
239+ db ?. onclose ?. call ( db , new Event ( 'close' ) ) ;
237240
238241 const original = IDBDatabase . prototype . transaction ;
239242 let callCount = 0 ;
@@ -265,7 +268,8 @@ describe('createStore - connection resilience', () => {
265268 const store = createStore ( dbName , STORE_NAME ) ;
266269
267270 const db = await captureDB ( store ) ;
268- db . onclose ! . call ( db , new Event ( 'close' ) ) ;
271+ expect ( db ) . toBeDefined ( ) ;
272+ db ?. onclose ?. call ( db , new Event ( 'close' ) ) ;
269273
270274 expect ( logInfoSpy ) . toHaveBeenCalledWith ( 'IDB connection closed by browser' , { dbName, storeName : STORE_NAME } ) ;
271275 } ) ;
@@ -279,7 +283,8 @@ describe('createStore - connection resilience', () => {
279283 } ) ;
280284
281285 const db = await captureDB ( store ) ;
282- db . onclose ! . call ( db , new Event ( 'close' ) ) ;
286+ expect ( db ) . toBeDefined ( ) ;
287+ db ?. onclose ?. call ( db , new Event ( 'close' ) ) ;
283288
284289 const result = await store ( 'readonly' , ( s ) => IDB . promisifyRequest ( s . get ( 'key1' ) ) ) ;
285290 expect ( result ) . toBe ( 'value' ) ;
@@ -292,13 +297,14 @@ describe('createStore - connection resilience', () => {
292297 const store = createStore ( dbName , STORE_NAME ) ;
293298
294299 const db = await captureDB ( store ) ;
295- const closeSpy = jest . spyOn ( db , 'close' ) ;
300+ expect ( db ) . toBeDefined ( ) ;
301+ const closeSpy = jest . spyOn ( db ! , 'close' ) ;
296302
297303 // @ts -expect-error -- our handler ignores the event argument
298- db . onversionchange ! . call ( db , new Event ( 'versionchange' ) ) ;
304+ db ? .onversionchange ? .call ( db , new Event ( 'versionchange' ) ) ;
299305
300306 expect ( closeSpy ) . toHaveBeenCalled ( ) ;
301- expect ( logInfoSpy ) . toHaveBeenCalledWith ( 'IDB connection closing due to versionchange ' , { dbName, storeName : STORE_NAME } ) ;
307+ expect ( logInfoSpy ) . toHaveBeenCalledWith ( 'IDB connection closing due to version change ' , { dbName, storeName : STORE_NAME } ) ;
302308 } ) ;
303309
304310 it ( 'should recover with a fresh connection after versionchange' , async ( ) => {
@@ -310,8 +316,9 @@ describe('createStore - connection resilience', () => {
310316 } ) ;
311317
312318 const db = await captureDB ( store ) ;
319+ expect ( db ) . toBeDefined ( ) ;
313320 // @ts -expect-error -- our handler ignores the event argument
314- db . onversionchange ! . call ( db , new Event ( 'versionchange' ) ) ;
321+ db ? .onversionchange ? .call ( db , new Event ( 'versionchange' ) ) ;
315322
316323 const result = await store ( 'readonly' , ( s ) => IDB . promisifyRequest ( s . get ( 'key1' ) ) ) ;
317324 expect ( result ) . toBe ( 'value' ) ;
0 commit comments