@@ -11,6 +11,7 @@ import {
1111 writable ,
1212 safeLoad ,
1313} from '../../src' ;
14+ import { delayValue , delayFunction } from '../helpers' ;
1415
1516describe ( 'asyncWritable' , ( ) => {
1617 const writableParent = writable ( 'writable' ) ;
@@ -83,7 +84,7 @@ describe('asyncWritable', () => {
8384 } ) ;
8485
8586 describe ( 'one parent asyncDerived' , ( ) => {
86- it ( 'loads expected value NOMERGE ' , async ( ) => {
87+ it ( 'loads expected value' , async ( ) => {
8788 const myAsyncDerived = asyncDerived ( writableParent , ( storeValue ) =>
8889 Promise . resolve ( `derived from ${ storeValue } ` )
8990 ) ;
@@ -242,7 +243,7 @@ describe('asyncWritable', () => {
242243
243244 // this sucks but I can't figure out a better way to wait for the
244245 // subscribe callbacks to get called without generating a new subscription
245- await new Promise ( ( resolve ) => setTimeout ( resolve , 100 ) ) ;
246+ await delayValue ( null , 100 ) ;
246247
247248 expect ( firstValue ) . toBe ( 'initial first' ) ;
248249 expect ( secondValue ) . toBe ( 'initial second' ) ;
@@ -252,7 +253,7 @@ describe('asyncWritable', () => {
252253 firstUnsubscribe ( ) ;
253254 writableParent . set ( 'updated' ) ;
254255
255- await new Promise ( ( resolve ) => setTimeout ( resolve , 50 ) ) ;
256+ await delayValue ( null , 50 ) ;
256257
257258 expect ( firstValue ) . toBe ( 'initial first' ) ;
258259 expect ( secondValue ) . toBe ( 'updated second' ) ;
@@ -262,11 +263,7 @@ describe('asyncWritable', () => {
262263
263264 describe ( 'abort/rebounce integration' , ( ) => {
264265 it ( 'loads to rebounced value only' , async ( ) => {
265- const load = ( value : string ) => {
266- return new Promise < string > ( ( resolve ) =>
267- setTimeout ( ( ) => resolve ( value ) , 100 )
268- ) ;
269- } ;
266+ const load = ( value : string ) => delayValue ( value , 100 ) ;
270267
271268 const myParent = writable ( ) ;
272269 const { store : myStore , state : myState } = asyncDerived ( myParent , load ) ;
@@ -286,14 +283,15 @@ describe('asyncWritable', () => {
286283 } ) ;
287284
288285 myParent . set ( 'a' ) ;
289- await new Promise ( ( resolve ) => setTimeout ( resolve , 50 ) ) ;
286+ await delayValue ( null , 50 ) ;
290287 expect ( get ( myState ) . isLoading ) . toBe ( true ) ;
291288
292289 myParent . set ( 'b' ) ;
293- await new Promise ( ( resolve ) => setTimeout ( resolve , 50 ) ) ;
290+ await delayValue ( null , 50 ) ;
294291 expect ( get ( myState ) . isLoading ) . toBe ( true ) ;
292+
295293 myParent . set ( 'c' ) ;
296- await new Promise ( ( resolve ) => setTimeout ( resolve , 50 ) ) ;
294+ await delayValue ( null , 50 ) ;
297295 expect ( get ( myState ) . isLoading ) . toBe ( true ) ;
298296
299297 const finalValue = await myStore . load ( ) ;
@@ -334,13 +332,15 @@ describe('asyncWritable', () => {
334332 } ) ;
335333
336334 myParent . set ( 'a' ) ;
337- await new Promise ( ( resolve ) => setTimeout ( resolve , 50 ) ) ;
335+ await delayValue ( null , 50 ) ;
338336 expect ( get ( myState ) . isLoading ) . toBe ( true ) ;
337+
339338 myParent . set ( 'b' ) ;
340- await new Promise ( ( resolve ) => setTimeout ( resolve , 50 ) ) ;
339+ await delayValue ( null , 50 ) ;
341340 expect ( get ( myState ) . isLoading ) . toBe ( true ) ;
341+
342342 myParent . set ( 'c' ) ;
343- await new Promise ( ( resolve ) => setTimeout ( resolve , 50 ) ) ;
343+ await delayValue ( null , 50 ) ;
344344 expect ( get ( myState ) . isLoading ) . toBe ( true ) ;
345345
346346 const finalValue = await myStore . load ( ) ;
@@ -355,9 +355,7 @@ describe('asyncWritable', () => {
355355 let timesCalled = 0 ;
356356 const load = ( value : string ) => {
357357 timesCalled += 1 ;
358- return new Promise < string > ( ( resolve ) =>
359- setTimeout ( ( ) => resolve ( value ) , 200 - timesCalled * 100 )
360- ) ;
358+ return delayValue ( value , 200 - timesCalled * 100 ) ;
361359 } ;
362360
363361 const myParent = writable ( ) ;
@@ -382,7 +380,7 @@ describe('asyncWritable', () => {
382380 const result = await myStore . load ( ) ;
383381 expect ( result ) . toBe ( 'b' ) ;
384382
385- await new Promise ( ( resolve ) => setTimeout ( resolve , 200 ) ) ;
383+ await delayValue ( null , 200 ) ;
386384 expect ( get ( myStore ) ) . toBe ( 'b' ) ;
387385 expect ( setIncorrectly ) . toBe ( false ) ;
388386 expect ( get ( myState ) . isLoaded ) . toBe ( true ) ;
@@ -394,41 +392,34 @@ describe('asyncWritable', () => {
394392 . mockReturnValueOnce ( 'first' )
395393 . mockReturnValueOnce ( 'second' ) ;
396394
397- const load = ( ) => {
398- const valueToReturn = getFinalValue ( ) ;
399-
400- return new Promise < string > ( ( resolve ) =>
401- setTimeout ( ( ) => resolve ( valueToReturn ) , 100 )
402- ) ;
403- } ;
404-
405- const myLoadable = asyncReadable ( 'initial' , load , {
406- reloadable : true ,
407- } ) ;
395+ const myLoadable = asyncReadable (
396+ 'initial' ,
397+ delayFunction ( getFinalValue , 100 ) ,
398+ {
399+ reloadable : true ,
400+ }
401+ ) ;
408402
409403 expect ( myLoadable . load ( ) ) . resolves . toBe ( 'second' ) ;
410- await new Promise ( ( resolve ) => setTimeout ( resolve , 50 ) ) ;
404+ await delayValue ( null , 50 ) ;
411405 const finalValue = await myLoadable . reload ( ) ;
412406 expect ( finalValue ) . toBe ( 'second' ) ;
413407 } ) ;
414408
415409 it ( 'can be aborted correctly' , async ( ) => {
416- const load = ( value : string ) => {
417- return new Promise < string > ( ( resolve ) =>
418- setTimeout ( ( ) => resolve ( value ) , 100 )
419- ) ;
420- } ;
421-
422410 const myParent = writable ( ) ;
423- const { store : myStore , state : myState } = asyncDerived ( myParent , load ) ;
411+ const { store : myStore , state : myState } = asyncDerived (
412+ myParent ,
413+ delayFunction ( ( value ) => value , 100 )
414+ ) ;
424415
425416 myStore . subscribe ( vi . fn ( ) ) ;
426417 myParent . set ( 'one' ) ;
427418 let loadValue = await myStore . load ( ) ;
428419 expect ( loadValue ) . toBe ( 'one' ) ;
429420
430421 myParent . set ( 'two' ) ;
431- await new Promise ( ( resolve ) => setTimeout ( resolve , 50 ) ) ;
422+ await delayValue ( null , 50 ) ;
432423 myStore . abort ( ) ;
433424
434425 loadValue = await myStore . load ( ) ;
@@ -475,7 +466,7 @@ describe('asyncWritable', () => {
475466 it ( 'deterministically sets final value when receiving updates while loading' , async ( ) => {
476467 const delayedParent = asyncReadable (
477468 undefined ,
478- ( ) => new Promise ( ( resolve ) => setTimeout ( resolve , 1000 ) )
469+ delayFunction ( ( ) => null , 100 )
479470 ) ;
480471 const mockLoad = vi
481472 . fn ( )
@@ -520,18 +511,17 @@ describe('asyncWritable', () => {
520511 const parentA = derived ( grandParent , ( value ) => value ) ;
521512 const parentB = asyncDerived (
522513 grandParent ,
523- ( value ) =>
524- new Promise ( ( resolve ) =>
525- setTimeout ( ( ) => resolve ( value . toUpperCase ( ) ) , 100 )
526- )
514+ delayFunction ( ( value ) => value . toUpperCase ( ) , 100 )
527515 ) ;
516+ const parentC = asyncDerived (
517+ parentB ,
518+ delayFunction ( ( value ) => value , 100 )
519+ ) ;
520+
528521 const load = vi . fn (
529- ( [ valueA , valueB ] ) =>
530- new Promise ( ( resolve ) =>
531- setTimeout ( ( ) => resolve ( valueA + valueB ) , 100 )
532- )
522+ delayFunction ( ( [ valueA , valueB ] ) => valueA + valueB , 100 )
533523 ) ;
534- const myLoadable = asyncDerived ( [ parentA , parentB ] , load ) ;
524+ const myLoadable = asyncDerived ( [ parentA , parentC ] , load ) ;
535525 myLoadable . subscribe ( vi . fn ( ) ) ;
536526
537527 let result = await myLoadable . load ( ) ;
@@ -868,7 +858,7 @@ describe('asyncWritable', () => {
868858 expect ( get ( myAsyncWritable ) ) . toBe ( 'derived from first value' ) ;
869859 await myAsyncWritable . reload ( ) ;
870860 expect ( get ( myAsyncWritable ) ) . toBe ( 'derived from second value' ) ;
871- expect ( myAsyncWritable . load ( ) ) . resolves . toBe ( 'derived from second value' ) ;
861+ expect ( await myAsyncWritable . load ( ) ) . toBe ( 'derived from second value' ) ;
872862
873863 await myAsyncWritable . set ( 'set value' ) ;
874864 expect ( get ( myAsyncWritable ) ) . toBe ( 'set value' ) ;
@@ -1164,10 +1154,7 @@ describe('trackState', () => {
11641154 const myParent = writable ( 'initial' ) ;
11651155 const { store : myStore , state : myState } = asyncDerived (
11661156 myParent ,
1167- ( $myParent ) =>
1168- new Promise ( ( resolve ) =>
1169- setTimeout ( ( ) => resolve ( `derived from ${ $myParent } ` ) , 50 )
1170- ) ,
1157+ delayFunction ( ( $myParent ) => `derived from ${ $myParent } ` , 50 ) ,
11711158 { trackState : true }
11721159 ) ;
11731160
@@ -1181,7 +1168,6 @@ describe('trackState', () => {
11811168 expect ( get ( myState ) . isLoaded ) . toBe ( true ) ;
11821169
11831170 myParent . set ( 'updated' ) ;
1184- await new Promise ( ( resolve ) => setTimeout ( resolve ) ) ;
11851171
11861172 expect ( get ( myStore ) ) . toBe ( 'derived from initial' ) ;
11871173 expect ( get ( myState ) . isReloading ) . toBe ( true ) ;
@@ -1204,13 +1190,7 @@ describe('trackState', () => {
12041190 ) ;
12051191 const { store : myStore , state : myState } = asyncDerived (
12061192 [ parentA , parentB ] ,
1207- ( [ $parentA , $parentB ] ) => {
1208- return new Promise ( ( resolve ) => {
1209- setTimeout ( ( ) => {
1210- resolve ( `${ $parentA } ${ $parentB } ` ) ;
1211- } , 100 ) ;
1212- } ) ;
1213- } ,
1193+ delayFunction ( ( [ $parentA , $parentB ] ) => `${ $parentA } ${ $parentB } ` , 100 ) ,
12141194 { trackState : true }
12151195 ) ;
12161196
@@ -1224,7 +1204,6 @@ describe('trackState', () => {
12241204 expect ( get ( myState ) . isLoaded ) . toBe ( true ) ;
12251205
12261206 grandParent . set ( 'updated' ) ;
1227- await new Promise ( ( resolve ) => setTimeout ( resolve ) ) ;
12281207
12291208 expect ( get ( myStore ) ) . toBe ( 'initialA initialB' ) ;
12301209 expect ( get ( myState ) . isReloading ) . toBe ( true ) ;
0 commit comments