react-use/tests/useSetState.test.ts
Anton Zinovyev 8de2a3ee13 chore: move tests to top level /tests folder
chore: move all the tests to the separate directory outside of sources;

chore: remove jest.config.js (config moved to the package.json);

test: unused import in test;

test: 💍 fix tests add back x and y to useMeasure

chore: 🤖 add linter to /tests folder

ci: 🎡 limit Jest worker count for CircleCI
2019-11-08 16:55:34 -05:00

61 lines
1.7 KiB
TypeScript

import { act, renderHook } from '@testing-library/react-hooks';
import useSetState from '../src/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 });
});
/**
* Enforces cases where a hook can safely depend on the callback without
* causing an endless rerender cycle: useEffect(() => setState({ data }), [setState]);
*/
it('should return a memoized setState callback', () => {
const { result, rerender } = setUp({ ok: false });
const [, setState1] = result.current;
act(() => {
setState1({ ok: true });
});
rerender();
const [, setState2] = result.current;
expect(setState1).toBe(setState2);
});