UNPKG

react-micro-reducer

Version:

A React reducer hook, with a "micro"-reducer style, made for a Typescript world 💙

90 lines (89 loc) • 3.27 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var index_1 = require("./index"); var immer_1 = __importDefault(require("immer")); var react_hooks_1 = require("@testing-library/react-hooks"); var defaultReducer = function (state) { return ({ increment: function () { return state + 1; }, decrement: function () { return state - 1; }, set: function (value) { return value; }, multiplySeed: function (a, b) { return a * b; } }); }; var defaultState = 0; var setupHook = function (reducer, initialState, producer) { return react_hooks_1.renderHook(function () { var _a = index_1.useMicroReducer(reducer, initialState, producer), state = _a[0], dispatch = _a[1]; // Get out state and dispatch in a cleaner fashion return { state: state, dispatch: dispatch }; }); }; test("Initial state: undefined", function () { var result = setupHook(function () { return ({}); }).result; expect(result.current.state).toBe(undefined); }); test("Initial state: 0", function () { var result = setupHook(defaultReducer, defaultState).result; expect(result.current.state).toBe(0); }); test("Dispatch gets the expected actions", function () { var expectedActions = ["decrement", "increment", "multiplySeed", "set"]; var result = setupHook(defaultReducer, defaultState).result; var actualActions = Object.keys(result.current.dispatch); actualActions.sort(); expect(actualActions).toEqual(expectedActions); }); test("Dispatch with NO arguments work", function () { var result = setupHook(defaultReducer, defaultState).result; var currentState = result.current.state; react_hooks_1.act(function () { result.current.dispatch.increment(); }); expect(result.current.state).toBe(currentState + 1); }); test("Dispatch with ONE arguments work", function () { var result = setupHook(defaultReducer, defaultState).result; react_hooks_1.act(function () { result.current.dispatch.set(42); }); expect(result.current.state).toBe(42); }); test("Dispatch with MULTIPLE arguments work", function () { var result = setupHook(defaultReducer, defaultState).result; react_hooks_1.act(function () { result.current.dispatch.multiplySeed(7, 6); }); expect(result.current.state).toBe(42); }); // Immer defaults var immerReducer = function (draft) { return ({ search: function (query1, query2) { draft.query = query1 + " " + query2; } }); }; var immerState = { query: "" }; test("Immer initial state", function () { var result = setupHook(immerReducer, immerState, immer_1.default).result; expect(result.current.state).not.toEqual({ query: "hi" }); expect(result.current.state).toEqual({ query: "" }); }); test("Immer dispatch", function () { var result = setupHook(immerReducer, immerState, immer_1.default).result; react_hooks_1.act(function () { result.current.dispatch.search("I am", "awesome"); }); expect(result.current.state).toEqual({ query: "I am awesome" }); });