UNPKG

@helpscout/cyan

Version:

Cypress-like Testing for React + JSDOM

124 lines (84 loc) 3.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var React = _interopRequireWildcard(require("react")); var _reactDom = _interopRequireDefault(require("react-dom")); var _cyan = _interopRequireDefault(require("../cyan")); var _cleanUp2 = _interopRequireDefault(require("../cleanUp")); var _domCleanUp = _interopRequireDefault(require("../domCleanUp")); var _timers = require("../timers"); var _wrapWithProvider = _interopRequireDefault(require("./wrapWithProvider")); var _render = require("../utils/render.utils"); var _is = require("../utils/is.utils"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } var RenderWrapper = /*#__PURE__*/ function (_Cyan) { _inheritsLoose(RenderWrapper, _Cyan); function RenderWrapper(Component) { var _this = _Cyan.call(this) || this; _this.setComponent(Component); _this.mount(Component); // .get() method comes from Cyan // @ts-ignore _this.get(_this.root.children[0]); return _assertThisInitialized(_assertThisInitialized(_this)) || _assertThisInitialized(_this); } var _proto = RenderWrapper.prototype; _proto.setRootNode = function setRootNode() { this.cleanUp(); // Create the root node for ReactDOM to mount to this.root = (0, _render.createRootNode)(); document.body.appendChild(this.root); }; _proto.setComponent = function setComponent(Component) { this.Component = Component && Component.type ? React.createElement(Component.type, null) : null; this.initialProps = Component && Component.props ? Component.props : {}; }; _proto.mount = function mount(Component) { if (Component === void 0) { Component = this.Component; } this.setComponent(Component); this.setRootNode(); // Render the WrappedComponent into the root node this.WrappedComponent = (0, _wrapWithProvider.default)(this.Component); (0, _timers.runAllTimers)(); this.render(this.initialProps); return this; }; _proto.setProps = function setProps(props) { if (props === void 0) { props = this.initialProps; } this.render(props); return this; }; _proto.setProp = function setProp(prop, value) { var _this$setProps; if (!(0, _is.isDefined)(prop)) { return this; } this.setProps((_this$setProps = {}, _this$setProps[prop] = value, _this$setProps)); return this; }; _proto.cleanUp = function cleanUp() { (0, _cleanUp2.default)(); (0, _domCleanUp.default)(); return this; }; _proto.unmount = function unmount() { this.cleanUp(); return this; }; _proto.render = function render(props) { var Component = this.WrappedComponent; _reactDom.default.render(React.createElement(Component, props), this.root); return this; }; return RenderWrapper; }(_cyan.default); var _default = RenderWrapper; exports.default = _default;