From 716a7d483da73e3ed4d1f9d19ded1c6d7bc3eda1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20Beltra=CC=81n=20Alarco=CC=81n?= Date: Fri, 2 Aug 2019 16:01:08 +0200 Subject: [PATCH] Add useSetState tests --- src/__tests__/useSetState.test.ts | 42 +++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/__tests__/useSetState.test.ts diff --git a/src/__tests__/useSetState.test.ts b/src/__tests__/useSetState.test.ts new file mode 100644 index 00000000..684ba30b --- /dev/null +++ b/src/__tests__/useSetState.test.ts @@ -0,0 +1,42 @@ +import { act, renderHook } from '@testing-library/react-hooks'; +import useSetState from '../useSetState'; + +const setUp = (initialState?: object) => renderHook(() => useSetState(initialState)); + +it('should init state and setter', () => { + const { result } = setUp({ foo: 'bar' }); + const [state, setState] = result.current; + + expect(state).toEqual({ foo: 'bar' }); + expect(setState).toBeInstanceOf(Function); +}); + +it('should init empty state if not initial state provided', () => { + const { result } = setUp(); + + expect(result.current[0]).toEqual({}); +}); + +it('should merge changes into current state when providing object', () => { + const { result } = setUp({ foo: 'bar', count: 1 }); + const [state, setState] = result.current; + + act(() => { + // @ts-ignore + setState({ count: state.count + 1, someBool: true }); + }); + + expect(result.current[0]).toEqual({ foo: 'bar', count: 2, someBool: true }); +}); + +it('should merge changes into current state when providing function', () => { + const { result } = setUp({ foo: 'bar', count: 1 }); + const [, setState] = result.current; + + act(() => { + // @ts-ignore + setState(prevState => ({ count: prevState.count + 1, someBool: true })); + }); + + expect(result.current[0]).toEqual({ foo: 'bar', count: 2, someBool: true }); +});