react-3ducks
Version:
Simple state management library for React
145 lines • 7.14 kB
JavaScript
;
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