import React from 'react';
import { render, fireEvent } from '@testing-library/react';
import { act, renderHook } from '@testing-library/react-hooks';
import createReducerContext from '../src/factory/createReducerContext';
type Action = 'increment' | 'decrement';
const reducer = (state: number, action: Action) => {
switch (action) {
case 'increment':
return state + 1;
case 'decrement':
return state - 1;
default:
throw new Error();
}
};
it('should create a hook and a provider', () => {
const [useSharedNumber, SharedNumberProvider] = createReducerContext(reducer, 0);
expect(useSharedNumber).toBeInstanceOf(Function);
expect(SharedNumberProvider).toBeInstanceOf(Function);
});
describe('when using created hook', () => {
it('should throw out of a provider', () => {
const [useSharedNumber] = createReducerContext(reducer, 0);
const { result } = renderHook(() => useSharedNumber());
expect(result.error).toEqual(
new Error('useReducerContext must be used inside a ReducerProvider.')
);
});
const setUp = () => {
const [useSharedNumber, SharedNumberProvider] = createReducerContext(reducer, 0);
const wrapper = ({ children }: { children?: React.ReactNode }) => (
{sharedNumber}
; }; const UpdateComponent = () => { const [, updateSharedNumber] = useSharedNumber(); return ( ); }; it('should be in sync when under the same provider', () => { const { baseElement, getByText } = render(0
0
1
1
0
0
0
1
static
; }; const { baseElement, getByText } = render( <>static
0
static
1
0
15