Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | import { act } from 'react'; import { renderHook } from '@testing-library/react'; import useSessionStorage from './useSessionStorage'; const SESSION_STORAGE_KEY = 'test'; describe('Hook Session Storage', () => { beforeEach(() => { window.sessionStorage.removeItem(SESSION_STORAGE_KEY); }); it('hook should return state and setState', () => { const data = { test: 1 }; const { result } = renderHook(() => useSessionStorage({ key: SESSION_STORAGE_KEY, defaultValue: data }) ); const [hookState, setHookState] = result.current; expect(hookState).toStrictEqual(data); expect(typeof setHookState).toBe('function'); }); it('hook should store data on sessionStorage', () => { const data = { test: 2 }; renderHook(() => useSessionStorage({ key: SESSION_STORAGE_KEY, defaultValue: data })); const dataStr = JSON.stringify(data); const dataSessionStorage = window.sessionStorage.getItem(SESSION_STORAGE_KEY); expect(dataSessionStorage).toEqual(dataStr); }); it('hook should return stored data from sessionStorage', () => { const data = { test: 3 }; const dataToCompare = { test: 4 }; window.sessionStorage.setItem(SESSION_STORAGE_KEY, JSON.stringify(dataToCompare)); const { result } = renderHook(() => useSessionStorage({ key: SESSION_STORAGE_KEY, defaultValue: data }) ); const [hookState, setHookState] = result.current; expect(hookState).toStrictEqual(dataToCompare); }); it('hook should provide a setState method which updates its state', () => { const data = { test: 5 }; const dataToCompare = { test: 6 }; const { result } = renderHook(() => useSessionStorage({ key: SESSION_STORAGE_KEY, defaultValue: data }) ); const [hookState, setHookState] = result.current; act(() => { setHookState(dataToCompare); }); const dataToCompareStr = JSON.stringify(dataToCompare); const dataSessionStorage = window.sessionStorage.getItem(SESSION_STORAGE_KEY); const [hookStateToCompare] = result.current; expect(dataSessionStorage).toEqual(dataToCompareStr); expect(hookStateToCompare).toStrictEqual(dataToCompare); }); it('hook state must be preserved in case rerender', () => { const data = { test: 7 }; const { result, rerender } = renderHook(() => useSessionStorage({ key: SESSION_STORAGE_KEY, defaultValue: data }) ); rerender(); const [hookState, setHookState] = result.current; const dataToCompareStr = JSON.stringify(data); const dataSessionStorage = window.sessionStorage.getItem(SESSION_STORAGE_KEY); expect(dataSessionStorage).toEqual(dataToCompareStr); expect(hookState).toStrictEqual(data); }); it('hook state must be preserved in case multiple operations and rerender', () => { const data = { test: 8 }; const dataToCompare = { test: 9 }; const { result, rerender } = renderHook(() => useSessionStorage({ key: SESSION_STORAGE_KEY, defaultValue: data }) ); const [hookState, setHookState] = result.current; act(() => { setHookState(dataToCompare); }); rerender(); const dataToCompareStr = JSON.stringify(dataToCompare); const dataSessionStorage = window.sessionStorage.getItem(SESSION_STORAGE_KEY); const [hookStateToCompare] = result.current; expect(dataSessionStorage).toEqual(dataToCompareStr); expect(hookStateToCompare).toStrictEqual(dataToCompare); }); }); |