UNPKG

react-3ducks

Version:

Simple state management library for React

145 lines 7.14 kB
"use strict"; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var index_1 = __importStar(require("./index")); var react_1 = __importDefault(require("react")); var enzyme_1 = require("enzyme"); describe("StateStore", function () { it("should initialize successfully", function () { var store = new index_1.default({ value: 0 }); expect(store.state).toEqual({ value: 0 }); }); it("should setState successfully", function () { var store = new index_1.default({ value: 0 }); store.setState({ value: 1 }); expect(store.state).toEqual({ value: 1 }); }); it("should subscribe successfully", function () { var store = new index_1.default({ value: 0 }); var listener = jest.fn(); store.subscribe("value", listener); store.setState({ value: 1 }); expect(listener).toHaveBeenCalledTimes(1); }); it("should unsubscribe successfully", function () { var store = new index_1.default({ value: 0 }); var listener = jest.fn(); store.subscribe("value", listener); store.setState({ value: 1 }); store.unsubscribe(listener); store.setState({ value: 2 }); expect(listener).toHaveBeenCalledTimes(1); }); it("should not allow mutating state directly", function () { var store = new index_1.default({ value: 0 }); expect(function () { return store.state = { value: 1 }; }).toThrow(); expect(store.state.value).toBe(0); }); it("should not allow setting the state property directly", function () { var store = new index_1.default({ value: 0 }); expect(function () { return store.state = { value: 1 }; }).toThrow(); expect(store.state).toEqual({ value: 0 }); }); }); describe("root", function () { it("should render context provider", function () { var testStore = new index_1.default({ value: 0 }); var contextValue = { testStore: testStore }; var Cmp = index_1.root(react_1.default.Fragment, contextValue); var wrapper = enzyme_1.shallow(react_1.default.createElement(Cmp, null)); expect(index_1._StoresContext).toBeDefined(); if (index_1._StoresContext) expect(wrapper.is(index_1._StoresContext.Provider)).toBeTruthy(); expect(wrapper.prop("value")).toEqual(contextValue); }); it("should render wrapped component", function () { var testStore = new index_1.default({ value: 0 }); var contextValue = { testStore: testStore }; var WrappedComponent = function () { return (react_1.default.createElement("div", null)); }; var Cmp = index_1.root(WrappedComponent, contextValue); var wrapper = enzyme_1.shallow(react_1.default.createElement(Cmp, null)); expect(wrapper.childAt(0).is(WrappedComponent)); }); }); describe("container", function () { it("should render context consumer", function () { var ContainerCmp = index_1.container(react_1.default.Fragment); var wrapper = enzyme_1.shallow(react_1.default.createElement(ContainerCmp, null)); expect(index_1._StoresContext).toBeDefined(); if (index_1._StoresContext) expect(wrapper.is(index_1._StoresContext.Consumer)).toBeTruthy(); }); it("should pass stores to wrapped component", function () { var testStore = new index_1.default({ value: 0 }); var contextValue = { testStore: testStore }; var WrappedComponent = function () { return (react_1.default.createElement(react_1.default.Fragment, null)); }; var RootCmp = index_1.root(react_1.default.Fragment, contextValue); var ContainerCmp = index_1.container(WrappedComponent); var wrapper = enzyme_1.mount(react_1.default.createElement(ContainerCmp, null), { wrappingComponent: RootCmp }); expect(wrapper.find(WrappedComponent).props()).toEqual(contextValue); }); it("should pass stores and ownProps to mapToProps", function () { var testStore = new index_1.default({ value: 0 }); var contextValue = { testStore: testStore }; var WrappedComponent = function () { return (react_1.default.createElement(react_1.default.Fragment, null)); }; var RootCmp = index_1.root(react_1.default.Fragment, contextValue); var expectedResult = { value: 0, testProp: "abc" }; var mapToProps = jest.fn(function (_a, ownProps) { var testStore = _a.testStore; return ({ value: testStore.state.value, testProp: ownProps.testProp }); }); var ContainerCmp = index_1.container(WrappedComponent, mapToProps); var wrapper = enzyme_1.mount(react_1.default.createElement(ContainerCmp, { testProp: "abc" }), { wrappingComponent: RootCmp }); expect(wrapper.find(WrappedComponent).props()).toEqual(expectedResult); }); it("should pass and update WrappedComponent props with ContainerComponent props", function () { var WrappedComponent = function () { return (react_1.default.createElement(react_1.default.Fragment, null)); }; var propsBefore = { testProp: "abc" }; var propsAfter = { testProp: "abcd" }; var ContainerCmp = index_1.container(WrappedComponent); var wrapper = enzyme_1.mount(react_1.default.createElement(ContainerCmp, { testProp: "abc" })); expect(wrapper.find(WrappedComponent).props()).toEqual(propsBefore); wrapper.setProps({ testProp: "abcd" }); expect(wrapper.find(WrappedComponent).props()).toEqual(propsAfter); }); it("should update WrappedComponent props when store state is updated", function () { var testStore = new index_1.default({ value: 0 }); var contextValue = { testStore: testStore }; var WrappedComponent = function () { return (react_1.default.createElement(react_1.default.Fragment, null)); }; var RootCmp = index_1.root(react_1.default.Fragment, contextValue); var expectedResult = { value: 1 }; var mapToProps = jest.fn(function (_a) { var testStore = _a.testStore; return ({ value: testStore.state.value }); }); var ContainerCmp = index_1.container(WrappedComponent, mapToProps); var wrapper = enzyme_1.mount(react_1.default.createElement(ContainerCmp, null), { wrappingComponent: RootCmp }); testStore.setState({ value: 1 }); wrapper.update(); expect(wrapper.find(WrappedComponent).props()).toEqual(expectedResult); }); }); //# sourceMappingURL=index.test.js.map