Skip to content

Commit bec13e4

Browse files
committed
chore: test cleanup
1 parent daaa643 commit bec13e4

File tree

4 files changed

+61
-70
lines changed

4 files changed

+61
-70
lines changed

test/async-stores/index.test.ts

Lines changed: 41 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
writable,
1212
safeLoad,
1313
} from '../../src';
14+
import { delayValue, delayFunction } from '../helpers';
1415

1516
describe('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);

test/helpers.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
type FlatPromise<T> = T extends Promise<unknown> ? T : Promise<T>;
2+
3+
export const delayValue = <T>(value: T, delay = 0): FlatPromise<T> => {
4+
return new Promise((resolve) =>
5+
setTimeout(() => resolve(value), delay)
6+
) as FlatPromise<T>;
7+
};
8+
9+
export const delayFunction = <T, U>(
10+
callback: (...args: T[]) => U,
11+
delay = 0
12+
): ((...args: T[]) => FlatPromise<U>) => {
13+
return (...args: T[]) => {
14+
const result = callback(...args);
15+
return delayValue(result, delay);
16+
};
17+
};

test/standard-stores/index.test.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,6 @@ describe('readable/writable stores', () => {
227227
expect(stop).toHaveBeenCalledTimes(1);
228228

229229
await myReadable.load();
230-
await new Promise((resolve) => setTimeout(resolve));
231230
expect(stop).toHaveBeenCalledTimes(2);
232231
});
233232
});

test/utils/index.test.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
safeLoad,
88
enableStoreTestingMode,
99
} from '../../src';
10+
import { delayValue } from '../helpers';
1011

1112
enableStoreTestingMode();
1213

@@ -111,13 +112,8 @@ describe('rebounce', () => {
111112

112113
const toUpperCase = (input: string) => input.toUpperCase();
113114

114-
const asyncToUpperCase = (input: string) => {
115-
return new Promise((resolve) => {
116-
setTimeout(() => {
117-
resolve(input.toUpperCase());
118-
}, interval());
119-
});
120-
};
115+
const asyncToUpperCase = (input: string) =>
116+
delayValue(input.toUpperCase(), interval());
121117

122118
it('works with no timer or rejects', () => {
123119
const rebouncedToUpperCase = rebounce(asyncToUpperCase);

0 commit comments

Comments
 (0)