UNPKG

use-async-resource

Version:

A custom React hook for simple data fetching with React Suspense

52 lines (38 loc) 1.75 kB
import { DataOrModifiedFn } from './types'; import { resourceCache } from './cache'; describe('resourceCache', () => { const apiFn = (_: number) => Promise.resolve(true); it('should not get a cached resource', async () => { expect(resourceCache(apiFn).get()).toBe(undefined); expect(resourceCache(apiFn).get(1)).toBe(undefined); }); it('should cache a new resource', async () => { function getData() { return true; } resourceCache(apiFn).set(getData as DataOrModifiedFn<boolean>, 1); expect(resourceCache(apiFn).get(1)).toBe(getData); }); it('should delete a cached resource', async () => { function getData() { return true; } resourceCache(apiFn).set(getData as DataOrModifiedFn<boolean>, 1); resourceCache(apiFn).delete(1); expect(resourceCache(apiFn).get(1)).toBe(undefined); }); it('should clear all cached resources', async () => { function getData1() { return true; } function getData2() { return true; } resourceCache(apiFn).set(getData1 as DataOrModifiedFn<boolean>, 1); resourceCache(apiFn).set(getData2 as DataOrModifiedFn<boolean>, 2); expect(resourceCache(apiFn).get(1)).toBe(getData1); expect(resourceCache(apiFn).get(2)).toBe(getData2); resourceCache(apiFn).clear(); expect(resourceCache(apiFn).get(1)).toBe(undefined); expect(resourceCache(apiFn).get(2)).toBe(undefined); }); it('should not collide with other api functions', async () => { const apiFn2 = (_: number) => Promise.resolve(true); function getData() { return true; } resourceCache(apiFn).set(getData as DataOrModifiedFn<boolean>, 1); expect(resourceCache(apiFn).get(1)).toBe(getData); expect(resourceCache(apiFn2).get(1)).toBe(undefined); }); });